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

socket.io xhr-polling断开事件

舒仲渊
2023-03-14
问题内容

我有一个socket.io节点脚本,其中:

socket.on('disconnect', function(data) {    
  console.log('disconnect!');
});

当我连接Chrome / Safari并关闭页面时,看到“断开连接!” 在我的服务器控制台中。

但是,当我连接iPhone并关闭页面时,看不到此消息。我懂了debug - xhr-polling closed due to exceeded duration

如何通过iOS接收断开连接事件?


问题答案:

当您在iPhone中查看页面时,Socket.io切换到xhr-polling传输。这可能是由socket.io的配置引起的,或者是由于iPhone中的浏览器不(完全)支持websocket。

关闭连接时,socket.io中的xhr-
polling实现不会发出断开连接事件,请参阅github问题#431。您可以通过强制socket.io服务器仅使用xhr-polling传输,在Chrome浏览器中重现此问题:

// the server side
var io = require('socket.io').listen(httpServer);
io.set('transports', ['xhr-polling']);

好消息:您可以要求socket.io的客户端通过打开sync disconnect on unload标志来通知服务器有关断开连接的信息:

// the browser (HTML) side
var socket = io.connect('http://localhost', {
  'sync disconnect on unload': true
});

警告:如果网络和/或服务器速度较慢,此选项可能会恶化用户体验,请参阅此请求请求以获取更多信息。

更新

根据socket.io强制通过XHR-polling断开连接,该设置sync disconnect on unload可能不足以解决iPhone /iPad上的问题。

正如你在socket.io客户端看到源代码,sync disconnect on unload建立一个监听beforeunload事件,这是iOS不Safari浏览器支持根据。

解决方案可能是修复socket.io-client侦听unloadpagehide事件,因为 卸载事件可能无法按预期进行向前和向后优化。
请改用pageshow和pagehide事件。
[Apple
Web内容指南]



 类似资料:
  • 长轮询是与服务器保持持久连接的最简单的方式,它不使用任何特定的协议,例如 WebSocket 或者 Server Sent Event。 它很容易实现,在很多场景下也很好用。 常规轮询 从服务器获取新信息的最简单的方式是定期轮询。也就是说,定期向服务器发出请求:“你好,我在这儿,你有关于我的任何信息吗?”例如,每 10 秒一次。 作为响应,服务器首先通知自己,客户端处于在线状态,然后 —— 发送目

  • 断开与wifi的连接. 请求方式: "|2|2|\r" 返回值: "|2|1|\r" wifi连接状态:wifi断开连接 Arduino样例: softSerial.print("|2|2|\r");

  • Flink在这里提供了一个示例:https://www.ververica.com/blog/stream-processing-introduction-event-time-apache-flink这描述了这样一个场景:有人在玩游戏,由于subway而失去连接,然后当他重新联机时,所有数据都恢复了,可以进行排序和处理。 我的理解是,如果有更多的球员,有两种选择: > 所有其他的将被延迟,等待该

  • 问题内容: 可以偷看事件循环进行诊断吗? 我想知道当前有多少事件在等待执行(不包括setTimeout / interval)。 更新:我想从正在运行的节点进程内部执行此操作。 问题答案: 使用setImmediate()为nodejs 0.10更新 虽然无法在队列中找到等待事件的数量,但发现了另一个可能有用的运行状况指标: 延迟将包含从排队事件到执行事件所花费的毫秒数。 这也考虑到了CPU密集型

  • 到目前为止,一切都很好。Chrome、Firefox和Opera都使用原生的websockets,所有消息都能正确接收。 但是,Internet Explorer和IcewaSel正在使用行为有点奇怪的XHR-polling回退...客户机只接收两条消息,在此之后客户机可以向服务器发送消息,但不会向客户机发送消息。从XHR-client发送的消息被正确接收和处理-每个websocket客户机都得到

  • 当我在3G移动网络(慢速互联网连接)上测试我的真实聊天应用程序时,