socket.io与node.js不按预期工作

我已经使用node.js + socket.io创build了简单的聊天应用程序。 当我尝试运行它时,它不会按预期运行:它不断地从客户端发送请求。 我已经在(客户端/服务器)端configuration了传输设置: ['jsonp-polling', 'xhr-polling'] 。 我试着设置['close timeout': 10] ,但这并没有改变任何东西。 我不明白这里发生了什么事。

我认为我的连接断了,就像我在日志文件中看到的那样(在最后)。

以下是我的代码:

服务器端:app.js ~~~~~~~~~~~~~~~~~~~~

 var sio = require('socket.io'); var io = sio.listen(app) io.configure(function () { io.enable('browser client minification'); io.enable('browser client etag'); io.enable('browser client gzip'); io.set('log level', 3); }); io.on('connection', function (client) { client.on('message', function (msg) { socket.broadcast(msg); }); client.on('disconnect', function () { }); }); 

客户端:index.html〜~~~~~~~~~~~~~~~~~~~~~~

 <!DOCTYPE html> <html> <head> <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.2/jquery.min.js"></script> <script src="http://cdn.socket.io/stable/socket.io.js"></script> <script> $(document).ready(function () { var socket = new io.Socket("localhost", {port: 8080}); socket.on('connect', function () { socket.send('A client connected.'); }); socket.on('message', function (message) { $('div#messages').append($('<p>'), message); }); socket.on('disconnect', function () { console.log('disconnected'); }); socket.connect(); $('input').keydown(function (event) { if(event.keyCode === 13) { socket.send($('input').val()); $('input').val(''); } }); }); </script> </head> <body> <input type="text" style="width: 300px;" /> <div id="messages" style="border:solid 1px #000;">&nbsp;</div> </body> </html> 

这里是日志文件:

 debug: client authorized info: handshake authorized U1Y79P8WLaMz_UWoiKTc debug: setting request GET /socket.io/1/xhr-polling/U1Y79P8WLaMz_UWoiKTc?t=1345273505128 debug: setting poll timeout debug: client authorized for debug: clearing poll timeout debug: xhr-polling writing 1:: debug: set close timeout for client U1Y79P8WLaMz_UWoiKTc debug: setting request GET /socket.io/1/xhr-polling/U1Y79P8WLaMz_UWoiKTc?t=1345273505194 debug: setting poll timeout debug: discarding transport debug: cleared close timeout for client U1Y79P8WLaMz_UWoiKTc debug: setting request GET /socket.io/1/xhr-polling/ufw4UqC2pCvWqqB5iKOQ?t=1345273505438 debug: setting poll timeout debug: clearing poll timeout debug: xhr-polling writing 7:::1+0 debug: set close timeout for client ufw4UqC2pCvWqqB5iKOQ warn: client not handshaken client should reconnect info: transport end (error) debug: cleared close timeout for client ufw4UqC2pCvWqqB5iKOQ debug: discarding transport debug: client authorized info: handshake authorized Uslh5g1YKNE8rCJDiKTd debug: client authorized info: handshake authorized -XHkL7Zk9KzA7WEFiKTe debug: client authorized info: handshake authorized _OOsM2nZOVgS93R-iKTf debug: client authorized info: handshake authorized IZ0vUej2iX_-TRSJiKTg debug: setting request GET /socket.io/1/xhr-polling/IZ0vUej2iX_-TRSJiKTg?t=1345273505717 debug: setting poll timeout debug: client authorized for debug: clearing poll timeout debug: xhr-polling writing 1:: debug: set close timeout for client IZ0vUej2iX_-TRSJiKTg 

任何人都可以build议如何debugging这个问题或者是什么问题呢?

 io.on('connection', function (client) { 

应该是io.sockets.on(...

 client.on('message', function (msg) { socket.broadcast(msg); 

应该是client.broadcast(msg);socket没有在任何地方定义)

您可以根据您的要求configurationsocket.io设置。 https://github.com/LearnBoost/Socket.IO/wiki/Configuring-Socket.IO

我也遇到了同样的问题,发现添加下面的行解决了这个问题

 io.set('transports',['xhr-polling']);