Javascript 即使用户转到网站内的其他页面,socket.io连接是否仍保持?
我正在用Javascript、Node.js和socket.io制作一个webapp。在web应用程序的一个部分(大厅),用户可以按一个按钮启动游戏,该按钮可执行以下操作:Javascript 即使用户转到网站内的其他页面,socket.io连接是否仍保持?,javascript,node.js,web-applications,socket.io,Javascript,Node.js,Web Applications,Socket.io,我正在用Javascript、Node.js和socket.io制作一个webapp。在web应用程序的一个部分(大厅),用户可以按一个按钮启动游戏,该按钮可执行以下操作: $.ajax({ url: "gameStart", type: 'POST', data: {myName: myNickname, enemyName: accepter, roomNamer: "1", showValid: offerValidStr, showThreat
$.ajax({
url: "gameStart",
type: 'POST',
data: {myName: myNickname,
enemyName: accepter,
roomNamer: "1",
showValid: offerValidStr,
showThreat: offerThreatStr},
success: function(page) {
document.open();
document.write(page);
}
});
服务器通过呈现HTML页面并发送(以及相关的CSS和Javascript文件)来响应该请求。用户还可以从游戏页面导航回大厅,类似的情况也会发生。大厅和gameStart页面的Javascript文件都有一部分与以下内容建立套接字连接:
var socket = io();
在这两个Javascript文件中,如果用户在没有离开页面的情况下断开连接(可能是因为服务器问题),我有:
socket.on('disconnect',function()){
prettyAlert(“连接丢失”,“连接已丢失”
+“很抱歉!你应该回到办公室。”
+“这可能是坏运气。但是,如果这种情况继续发生,”
+“这可能是个bug。”,[OK_BUTTON],没错,“disconnect”);
`})`;
我的印象是,当用户在大厅和gameStart页面之间导航时,他们打开的任何套接字都会断开连接,从而创建一个新的套接字。但是,当我通过运行节点服务器并使用浏览器连接到节点服务器进行本地测试时,当我关闭服务器时,会弹出多条警报消息。事实上,每次我到大厅和游戏开始页面,都会弹出一个。我猜这意味着所有的旧插座都还在那里?但我认为,一旦用户转到另一个页面,来自一个页面的Javascript就会停止运行。有人能解释一下发生了什么吗?除非您正在做SPA,否则当用户刷新页面时,无法避免socket.io断开连接
但是,您可以添加超时检查。通常情况下,除非手动关闭套接字,或者用户完全关闭该站点的浏览器/选项卡,否则该站点仍将保持打开状态,尽管有时您应该检查如何将其编码为工作状态。您可以对其进行编码,使其在游戏开始时关闭套接字,并根据需要打开另一个套接字
基本概念是在浏览器和站点服务器之间进行某种形式的握手,允许数据流、数据包或任何可能的数据流。所以,在同一个网站上开始一个游戏,可能是在同一个页面上开始的,这个套接字仍然是打开的,想象一下,就像facebook一样,你在你的个人资料上打开了一个群组页面,这会阻止你的聊天吗?没有。所以我希望这篇文章在正常情况下是有帮助的,除非手动关闭套接字,或者用户完全关闭该站点的浏览器/选项卡,否则它仍然会保持打开状态,尽管有时你应该检查你是如何编码它的。您可以对其进行编码,使其在游戏开始时关闭套接字,并在需要时打开另一个套接字。但是,当您调用
document.open时,该文档仅被“清除”。这并不意味着后台的js停止。你不应该总是重写页面。将其设计为一个单独的页面,其中某些部分是隐藏的。
socket.on('disconnect', function() {
prettyAlert("Connection Lost", "The connection has been lost. "
+ " Sorry about that! You should return to the <a href='https://toroidal-chess.herokuapp.com/'>login page</a>. "
+ "This could just be bad luck. However, if it keeps happening, "
+ " it is probably a bug.", [OK_BUTTON], true, "disconnect");
`})`;