Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关闭HTML5Web套接字_Javascript_Coffeescript_Websocket - Fatal编程技术网

Javascript 关闭HTML5Web套接字

Javascript 关闭HTML5Web套接字,javascript,coffeescript,websocket,Javascript,Coffeescript,Websocket,如果用户正在刷新页面或导航 远离它。在重新加载页面期间,Web服务器和浏览器之间的套接字连接似乎保持打开状态,如果在Firefox和Chrome浏览器中重新加载页面,则套接字连接将关闭。这意味着它只能每秒在浏览器和服务器之间建立连接,因为重新加载时浏览器会关闭套接字。Firefox Firebug控制台中的错误消息是“与ws://…/websocket的连接”在加载页面时中断“。因此,当页面重新加载时,显然websocket连接仍处于打开状态,这意味着该连接在页面加载期间关闭,而不是每秒钟打开一

如果用户正在刷新页面或导航 远离它。在重新加载页面期间,Web服务器和浏览器之间的套接字连接似乎保持打开状态,如果在Firefox和Chrome浏览器中重新加载页面,则套接字连接将关闭。这意味着它只能每秒在浏览器和服务器之间建立连接,因为重新加载时浏览器会关闭套接字。Firefox Firebug控制台中的错误消息是“与ws://…/websocket的连接”在加载页面时中断“。因此,当页面重新加载时,显然websocket连接仍处于打开状态,这意味着该连接在页面加载期间关闭,而不是每秒钟打开一次页面加载。例如这样读取的日志文件(使用gem创建)


这有点棘手,但您可以通过创建一个新的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;
    // ........
}