不发送/接收事件与socket.io和node.js

所以我有这个非常基本的socket.io设置,你可能已经看过一千次了。

请不要在这里通过apache提供的文件。

服务器 (app.js)

var io = require('socket.io').listen(8080); io.sockets.on('connection', function(socket){ socket.emit('server ready', {msg: 'hi'}) ; socket.on('random event', function(data) { console.log('received'); }) }); 

客户

 $(document).ready(function() { var socket = io.connect('http://127.0.0.1:8080/projectname/server/'); socket.on('server ready', function(data){ console.log('server ready!'); }); socket.emit('random event', {hurr: 'durr'}); }); 

但是,我得到的唯一的输出是

  debug - websocket writing 5:::{"name":"server ready","args":[{"msg":"hi"}]} 

在节点控制台中,没有在客户端控制台中。 哪个是错的

我已经尝试了来自socket.io网站的基本示例,并显示了完全相同的行为。 它将发射的数据logging在节点控制台中,但似乎没有其他的事情发生。

编辑:进一步调查,访问Firefox中的站点在节点控制台中创build一个不同的输出:

 info - handshake authorized 178702677759276313 debug - setting request GET /socket.io/1/xhr-polling/178702677759276313?t=1339080239192 debug - setting poll timeout debug - client authorized for debug - clearing poll timeout debug - xhr-polling writing 1:: debug - set close timeout for client 178702677759276313 debug - xhr-polling received data packet  17 1::/stock/server/ 66 5::/stock/server/:{"name":"random event","args":[{"hurr":"durr"}]} debug - setting request GET /socket.io/1/xhr-polling/178702677759276313?t=1339080239263 debug - setting poll timeout debug - clearing poll timeout debug - xhr-polling writing 5:::{"name":"server ready","args":[{"msg":"hi"}]} 

这看起来像客户端发出的数据实际上到达了服务器。 但是,它似乎并没有解决实际问题:console.log行和客户端和服务器端都没有执行。 这个输出来自Firefox 5.0.1 ,它似乎回退到xhr。

提前感谢!

如果你的项目名称是stock ,那就是你的问题。 Socket.IO认为你正在使用一个命名空间 。 你可以在xhr-polling received data packet日志行中看到这个。 console.log永远不会被调用,因为你不在服务器端的名字空间上进行监听。

您应该从您的客户端连接地址中删除/projectname/server ,并正确引用客户端库,以便您不会得到404。无论是Apache代理问题还是在头中修复script src ,都取决于您当前的设置。 我无法从你提供的代码中知道。

PS:Socket.io应该服务于http://127.0.0.1:8080/socket.io/socket.io.js的客户端库,但是您可能会通过引用文档中的资产来运行跨域来源策略问题由端口80上的apache服务器提供服务。快速修复可能是从位于socket.io-client模块dist文件夹中的apache服务器提供客户端lib。