当前位置: 首页 > 面试题库 >

socket.io通过XHR轮询强制断开连接

凌联
2023-03-14
问题内容

我有一个使用服务器上的nodejs和socket.io作为连接机制的客户端/服务器应用程序。出于与我的应用程序相关的原因,我希望每个浏览器只有一个活动连接,并拒绝来自其他选项卡的所有连接,这些选项卡可能在会话期间稍后打开。这在WebSockets上很好用,但是如果浏览器不支持WebSockets,而是使用XHR-
polling,则断开连接永远不会发生,因此,如果用户只是刷新页面,则不会被解释为重新连接(我有一个延迟重新连接和会话恢复),但作为新标签页,由于该标签页建立的旧连接仍处于活动状态,因此连接被拒绝。

我正在寻找一种在刷新发生时有效终止与客户端的连接的方法。我尝试绑定到beforeunloadsocket.disconnect()在客户端进行调用,并且还发送了类似消息socket.emit('force- disconnect')并触发与服务器的断开连接,但均未成功。我在这里想念什么吗?感谢你的帮助!

我已经阅读了此问题,但找不到对我的特定案例有用的问题。


问题答案:

解决了问题,事实证明这是中引入的错误socket.io0.9.5。如果遇到此问题,只需将服务器和客户端代码都更新为,socket.io > 0.9.9然后将socket.io客户端选项设置syncdisconnect on unloadtrue,就一切就绪。

选项的设置方式如下:

var socket = io.connect('http://yourdomain.com', {'sync disconnect on unload' : true});


 类似资料:
  • 问题内容: 我有一个socket.io节点脚本,其中: 当我连接Chrome / Safari并关闭页面时,看到“断开连接!” 在我的服务器控制台中。 但是,当我连接iPhone并关闭页面时,看不到此消息。我懂了 如何通过iOS接收断开连接事件? 问题答案: 当您在iPhone中查看页面时,Socket.io切换到xhr-polling传输。这可能是由socket.io的配置引起的,或者是由于iP

  • 当用户关闭选项卡或重新加载页面时,disconnect事件应该会触发,但当通过Nginx和CloudFlare传递连接时,则不会触发。提前感谢您的帮助! 更新:似乎在重新加载/关闭断开连接事件后的几秒钟内最终注册。

  • python爬取过程中如何才能强制断开close连接,确保每次ip都切换成功?

  • 问题内容: 我正在编写一个需要连接到在node.js服务器上运行的Socket.IO实例的android应用。 尝试使用iOS设备连接到实例并传输数据可以正常工作,但是当我尝试使用android设备进行操作时却失败了。 我正在使用Native java client,这是我在android端使用的代码: 每当我尝试连接时(基本上是在line上),日志将显示以下行: 因此,尝试连接后我立即收到xhr

  • 问题内容: 我有一个使用socket.IO的node.js应用程序。它可以在http上正常工作,但是当尝试通过https连接到套接字时,没有任何反应。 这是代码的一部分: 和功能: 客户端连接如下: 正如我说的,在http上一切正常,但是在https上连接会给我“连接被中断”。我究竟做错了什么? 问题答案: 您不能像服务器那样初始化服务器。您必须启动一个单独的https服务器,然后将socket.

  • 问题内容: 是否可以通过JS或Javascript强制进行下载,即网页不应该在浏览器的新标签页中打开文件,而是弹出窗口让用户选择“另存为”或使用???打开? 问题答案: 您不能通过JavaScript强制这种行为,需要在服务器端设置HTTP标头: 解决问题的方法是让AJAX方法将用户重定向到PDF的URL: (必须为PDF设置以上HTTP标头)