我正在使用Javascript,Node.js和socket.io制作一个webapp。在网络应用程序(大厅)的一个部分,用户可以按一个按钮开始游戏,这样做:
$.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文件)来响应该请求。用户还可以从游戏页面导航回大厅,这以类似的方式发生。大厅的Javascript文件和gameStart页面都有一个与它们建立套接字连接的部分:
var socket = io();
在两个Javascript文件中,如果用户断开连接而没有离开页面(可能是因为服务器问题),我有:
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");
`})`;
我的印象是,当用户在大厅和gameStart页面之间导航时,他们打开的任何套接字都会断开连接,从而创建一个新的套接字。但是,当我通过运行节点服务器并使用浏览器连接到本地测试本地时,当我终止服务器时,会弹出多个警报消息。实际上,每次去大厅和gameStart页面时都会弹出一个弹出窗口。所以我猜这意味着所有旧插座仍然存在?但是我认为一旦用户转到不同的页面,一个页面的Javascript就会停止运行。有人可以解释发生了什么吗?
答案 0 :(得分:1)
除非您正在执行SPA,否则当用户刷新页面时,无法避免socket.io断开连接。
但是,您可以handle page regresh disconnection添加超时检查。
答案 1 :(得分:1)
通常情况下,除非手动关闭套接字,或者用户完全关闭该网站的浏览器/标签,否则仍会保持打开状态,但有时您应检查编码方式是否有效。您可以对其进行编码以在游戏开始时关闭套接字,并根据需要打开另一个套接字。
基本概念在浏览器和站点服务器之间存在某种握手,允许数据流,数据包可能是什么。所以开始一个可能在同一页面上开始的同一网站的游戏,套接字仍然是开放的,想象你的个人资料上的Facebook你打开一个组页面会阻止你的聊天进来吗?不,所以我希望这些见解很有帮助