带有Socket.IO的NodeJS延迟发送数据

我正在使用Socket.IO主页(http://socket.io/)的例子。 它的工作原理和一切,但是发送数据的时间和接收到数据的时间有很大的延迟。

我正在使用XAMPP,在我的目录中有socket.html,并在我的浏览器中使用“http://localhost/socket.html”导航到该目录,并使服务器在端口8080上侦听。

服务器:

var io = require('socket.io').listen(8080); io.sockets.on('connection', function (socket) { socket.emit('news', { hello: 'world' }); socket.on('my other event', function (data) { console.log(data); }); }); 

HTML文件:

 <html> <head> <script src="http://localhost:8080/socket.io/socket.io.js"></script> <script> var socket = io.connect('http://localhost:8080'); socket.on('news', function (data) { console.log(data); socket.emit('my other event', { my: 'data' }); }); </script> </head> <body> </body> </html> 

我发现了这个问题。

在我更改的服务器中:

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

 var io = require('socket.io', { rememberTransport: false, transports: ['WebSocket', 'Flash Socket', 'AJAX long-polling'] }).listen(8080); 

这会强制服务器使用WebSocket,Flash套接字或长轮询。 它将尝试使用那些顺序。 rememberTransport强制服务器和客户端忘记最后使用哪个连接,并尝试连接上面的“传输”。

在客户端,我几乎做了同样的事情。 我补充说:

 { rememberTransport: false, transports: ['WebSocket', 'Flash Socket', 'AJAX long-polling']} 

到套接字的构造函数。 所以它看起来像:

 var socket = io.connect('http://localhost:843', { rememberTransport: false, transports: ['WebSocket', 'Flash Socket', 'AJAX long-polling']}); 

现在它似乎完美的工作。

多谢你们。

你有没有尝试过更长的消息?

套接字上肯定有一个缓冲区。 如果发送的字节数less于X字节,则在缓冲区未被填充之前可能会有一些等待时间。

你使用的是什么浏览器? Socket.IO降级到轮询,这将比本机浏览器networking套接字或闪光轮询慢得多。