关闭 HTML5 Web 套接字
Closing HTML5 Web Sockets
HTML5 如果用户刷新页面或导航,Web 套接字的行为会很奇怪远离它。在重新加载页面期间,Web 服务器和浏览器之间的套接字连接似乎保持打开状态,如果页面在浏览器中重新加载,则在 Firefox 和 Chrome 中关闭。这意味着它每隔一段时间才能在浏览器和服务器之间建立连接,因为套接字在重新加载时被浏览器关闭。Firefox 控制台中的错误消息是"页面加载时与 ws://.../websocket 的连接中断"。因此,显然在重新加载页面时,websocket 连接仍然打开,这意味着连接在页面加载期间关闭,而不是每隔页面加载打开一次。例如,像这样读取的日志文件(使用 Websocket-Rails gem 创建)
==> first page load
[ConnectionManager] Connection opened: #<Connection::fef69428febee72f4830>
[Channel] #<Connection::fef69428febee72f4830> subscribed to channel xyz
==> second page load
[Channel] #<Connection::dfc4b33090b95826e08e> unsubscribed from channel xyz
[ConnectionManager] Connection closed: #<Connection::dfc4b33090b95826e08e>
有没有办法关闭 onbeforeunload
Javascript 事件中的所有打开的套接字和连接,有些东西喜欢(在咖啡脚本中)。
window.onbeforeunload = () ->
close_all_sockets()
这有点棘手,但您可以通过创建新的 WebSocket 并通过其协议参数发送应断开连接的用户的标识来实现。
例如:
window.onbeforeunload = function () {
new WebSocket(myWebSocket.url, myUserName + "*" + myPassword);
}
服务器在收到使用此非标准协议的新连接请求时必须关闭相应的连接。
这是我在服务器(C#)的握手代码中所做的:
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;
// ........
}
希望这有帮助。
相关文章:
- PHP:Web套接字和html 5
- STOMP web套接字回调不'不起作用
- 将服务器托管的Web应用程序连接到本地Web套接字
- 在 HTML5 和 C# Web 套接字通信之间
- 是否可以在没有 .NET 4.5 主机的情况下使用当前 Web 套接字
- 使用rxjs创建一个可观察的对象,该对象稍后将连接到web套接字
- Web套接字安全URL加密
- 为什么在Web套接字中使用二进制数据
- Node.js/Socket.io 中的 Web 套接字支持,适用于旧版浏览器
- Java 脚本 Web 套接字客户端无法正常工作
- 通过 Web 套接字传递 googlemapsv3
- 如何为每个 Web 套接字仅使用一个数据库连接
- 设置 Web 套接字
- Web套接字在分配给全局变量时不起作用
- 在 Web 应用程序中实现套接字
- 关闭 HTML5 Web 套接字
- 运行 Web 套接字客户端编程
- 在客户端对 Web 套接字进行编程
- 如何对 Web 套接字进行单元测试 - JavaScript
- Web 套接字 DOM 对象检测