gpt4 book ai didi

node.js - Socket.io 不断轮询......它应该这样做吗?

转载 作者:搜寻专家 更新时间:2023-10-31 22:59:27 25 4
gpt4 key购买 nike

我有一个 Node 服务器和一个通过 socket.io 连接的网页。我在浏览器控制台中注意到它正在输出

XHR finished loading: GET "http://my_url/socket.io/?EIO=3&transport=polling&t=1418944327412-412&sid=vqLTUtW3QhNLwQG8AAAA".

XHR finished loading: POST "http://my_url/socket.io/?EIO=3&transport=polling&t=1418944385398-415&sid=vqLTUtW3QhNLwQG8AAAA".

每隔几秒。应该这样做还是我缺少设置。我真的只是想通过套接字明确地来回发送数据。也许我在设置中遗漏了一些东西。

客户端基本上是

var socket = io("http://my_url");

与通常的事件监听器。服务器端是

var io = require('socket.io')(server);

我试着把它放在服务器端

io.set('transports', ['websocket']);

但这似乎要了它的命。

最佳答案

socket.io 实现(使用 webSockets 时)会定期(每隔几秒)发送心跳和响应数据包,以不断验证连接是否有效。这是正常的。

这些数据包不是真正的 http 请求(它们是 websocket 数据包)所以不应该有完整的 http 数据包,除非 socket.io 实际上没有使用 webSocket 协议(protocol),而是而不是使用 HTTP 长轮询。 socket.io 将使用 webSocket 协议(protocol),只要客户端支持它(现在所有现代浏览器都应该支持)。

您可能必须注意如何在调试器中解释请求。 socket.io 连接以带有一些自定义 header 的 http 请求开始其生命周期,所有调试器都将显示此初始 http 请求。如果两端都支持 webSocket,那么服务器将返回一个将连接“升级”到 webSocket 协议(protocol)的响应。同样的 TCP 套接字开始时是一个 TCP 请求,然后变成了一个 webSocket 连接。在 webSocket 上发送的后续 webSockets 消息然后流经该 TCP 套接字。如何显示该流量取决于调试器。在 Chrome 调试器中,你必须打开原始的 http 连接,然后要求查看 websocket 流量,然后才能真正看到 webSocket 数据包。但是,我可以想象在其他不像 webSocket saavy 的调试器中,它们可能会显示与原始 HTTP 连接相关的后续数据包(我没有看过 Chrome 以外的调试器如何显示 webSocket 流量)。

我能想到的客户端会重复发送 HTTP 连接请求的唯一其他原因是,如果连接由于某种原因不断断开,所以每次连接断开时客户端都会不断重新连接。 socket.io 的设置可以控制客户端在连接丢失时尝试重新连接的频率/强度,但如果您遇到连接问题,那么您真的需要弄清楚为什么会出现连接问题,而不是而不是更改重新连接设置。

关于node.js - Socket.io 不断轮询......它应该这样做吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27557569/

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