gpt4 book ai didi

node.js - socket.io xhr-轮询断开连接事件

转载 作者:搜寻专家 更新时间:2023-11-01 00:18:43 27 4
gpt4 key购买 nike

我有一个 socket.io Node 脚本:

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 中的浏览器不(完全)支持 websockets。

当连接关闭时,socket.io 中的 xhr-polling 实现不会发出断开事件,参见 github issue #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
});

警告:当网络和/或您的服务器速度较慢时,此选项可能会恶化用户体验,请参阅 pull request获取更多信息。

更新

根据 socket.io force a disconnect over XHR-polling ,设置卸载时同步断开连接可能不足以解决 iPhone/iPad 上的问题。

正如您在 socket.io-client 中看到的那样 source code , sync disconnect on unloadbeforeunload 事件设置一个监听器,根据 iOS Safari 不支持。

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

关于node.js - socket.io xhr-轮询断开连接事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17987182/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com