gpt4 book ai didi

node.js - socket.io 连接上的多次握手

转载 作者:太空宇宙 更新时间:2023-11-03 23:42:51 25 4
gpt4 key购买 nike

我正在为移动应用程序编写服务器,并选择使用 socket.io 将通知从服务器推送到应用程序,但我在设置 socket.io 时遇到问题

目前在 io.connect(server:port) 上发起了无穷无尽的握手

debug - client authorized
info - handshake authorized HXtC1UPzcsEzO8X7x2B1
debug - client authorized
info - handshake authorized aE7hMGDpp5InO1UWx2B2
debug - client authorized
info - handshake authorized GBx_3n-8Lvbuo4QJx2B3
debug - client authorized
info - handshake authorized tOEl0F5wNlh4xkn1x2B4
debug - client authorized
info - handshake authorized K55Oit22yN9JDWxhx2B5
debug - client authorized
...

我在应用程序的客户端使用 socket.io-titanium,但我无法判断哪一端导致了此连接问题。

客户:

var io = require('socket.io-titanium');
var socket = io.connect('http://myserver.com:3000');
socket.on('connect', function (data){
Ti.API.log("socket.io connected");
});
socket.on('update', function (data){
Ti.API.log(data);
});

服务器:

index = fs.readFileSync(__dirname + '/index.html');
var updates = http.createServer(function(req, res) {
res.writeHead(200, {'Content-Type': 'text/html'});
res.end(index);
});

var io = require('socket.io').listen(updates);

var clients = {};

io.sockets.on('connection', function(socket) {
console.log("Server Connection Event");
socket.on('i am client', console.log);
});

io.set("polling duration", 10);
io.set("close timeout", 30);
updates.listen(3000, function(){
console.log("Updates listening on port 3000");
console.log("");
});

我在非常长的流(100+)中间收到一次“服务器连接事件”

我相信握手的想法是每个用户只需要授权和建立一次连接,直到连接关闭。

任何帮助将不胜感激!

最佳答案

您是在本地笔记本电脑上还是通过互联网进行测试?

如果是通过互联网进行的,您的 socket.io 客户端可能会回退到旧的基于轮询的协议(protocol)。例如,如果您的 ISP 恰好运行 HTTP/1.0 代理,则可能会发生这种情况。这样的代理将拒绝 HTTP/1.1 中定义的连接升级,因此 Web 套接字将失败,您的客户端将回退到旧方法,例如长轮询等。

如果您在本地笔记本电脑上运行时遇到此问题,则可能是其他问题。您可以打开 Chrome,然后打开开发人员工具 > 网络,然后选择 Web 套接字过滤器。现在导航到您的站点并查看您的 Web Socket 是否已正确建立。

关于node.js - socket.io 连接上的多次握手,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19921938/

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