Javascript 关闭HTML5Web套接字
如果用户正在刷新页面或导航 远离它。在重新加载页面期间,Web服务器和浏览器之间的套接字连接似乎保持打开状态,如果在Firefox和Chrome浏览器中重新加载页面,则套接字连接将关闭。这意味着它只能每秒在浏览器和服务器之间建立连接,因为重新加载时浏览器会关闭套接字。Firefox Firebug控制台中的错误消息是“与ws://…/websocket的连接”在加载页面时中断“。因此,当页面重新加载时,显然websocket连接仍处于打开状态,这意味着该连接在页面加载期间关闭,而不是每秒钟打开一次页面加载。例如这样读取的日志文件(使用gem创建)Javascript 关闭HTML5Web套接字,javascript,coffeescript,websocket,Javascript,Coffeescript,Websocket,如果用户正在刷新页面或导航 远离它。在重新加载页面期间,Web服务器和浏览器之间的套接字连接似乎保持打开状态,如果在Firefox和Chrome浏览器中重新加载页面,则套接字连接将关闭。这意味着它只能每秒在浏览器和服务器之间建立连接,因为重新加载时浏览器会关闭套接字。Firefox Firebug控制台中的错误消息是“与ws://…/websocket的连接”在加载页面时中断“。因此,当页面重新加载时,显然websocket连接仍处于打开状态,这意味着该连接在页面加载期间关闭,而不是每秒钟打开一
这有点棘手,但您可以通过创建一个新的WebSocket,并通过其协议参数发送应该断开连接的用户的标识来实现 例如:
window.onbeforeunload = function () {
new WebSocket(myWebSocket.url, myUserName + "*" + myPassword);
}
当服务器接收到此非标准协议的新连接请求时,必须关闭相应的连接
这就是我在服务器的握手代码(C#)中所做的:
希望这有帮助
window.onbeforeunload = () ->
close_all_sockets()
window.onbeforeunload = function () {
new WebSocket(myWebSocket.url, myUserName + "*" + myPassword);
}
switch (handshakeKey)
{
// ..........
case "Sec-WebSocket-Protocol":
string[] infos = handshakeValue.Split('*');
if (infos.Length == 2)
{
Guest aguest = server.FindGuest(infos[0]);
if (aguest != null && aguest.password == infos[1]) server.RemoveGuest(aguest);
// The removeGuest function closes its socket }
TCPClient.Close(); // close the temporary connection
break;
// ........
}