Socket.io不断轮询…应该这样做吗?

我有一个节点服务器和一个网页通过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的时候)会定期(每隔几秒)发送心跳和响应包,以不断validation连接是否正常。 这个是正常的。

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

您可能不得不小心如何在debugging器中parsing请求。 一个socket.io连接以一个自定义标题的http请求开始其生命,所有的debugging器将显示这个初始的http请求。 如果两端都支持webSocket,则服务器将返回一个响应,将“连接”升级到webSocket协议。 相同的TCP套接字作为一个TCP请求而开始,然后成为一个webSocket连接。 随后在webSocket上发送的webSocket消息将通过该TCP套接字stream动。 debugging器可能会显示该stream量。 在Chromedebugging器中,您必须打开原始http连接,然后要求查看websocketstream量,只有这样才能真正看到webSocket数据包。 但是,我可以想象在其他debugging器不像webSocket saavy,他们可能会显示后续数据包相关的原始HTTP连接(我没有看过如何除Chrome之外的debugging器显示webSocketstream量)。

唯一的另一个原因,我可以想到,一个客户端将重复发送HTTP连接请求是因为某种原因,如果连接不断下降,所以客户端每次连接下降时都保持重新连接。 socket.io具有设置,可以控制客户端在连接丢失时尝试重新连接的频率/次数,但是如果您有连接问题,那么您确实需要弄清楚为什么存在连接问题而不是更改重新连接设置。