socket.on('连接'…事件永远不会触发nodejs + express + socket.io
问题 socket.io不工作
细节
- 用
express [folder]; cd [folder]; npm install;
生成一个项目express [folder]; cd [folder]; npm install;
express [folder]; cd [folder]; npm install;
- 安装socket.io
npm install socket.io
- 运行下面的代码节点应用程序
- 客户端连接事件触发,但服务器连接从未被解雇。
build立
- 服务器 AWS免费套餐,Ubuntu 11.10,ami-a7f539ce
- nodejs v0.6.5
- express v2.5.1
- socket.io v0.8.7
客户
var socket = io.connect('http://example.com:3000'); socket.on('connect', function() { console.log('connected'); }); socket.on('message', function(msg){ console.log(msg); }); socket.on('disconnect', function() { console.log('disconnected'); }); socket.on('error', function (e) { console.log('System', e ? e : 'A unknown error occurred'); });
服务器
[...] app.listen(3000); // socket.io setup var socket = require('socket.io').listen(app); // socket.io connection establishment socket.on('connection', function (client) { client.send("hello"); console.log("hello", client); });
为什么连接事件从未被解雇?
花了一段时间才能注意到… connection
事件在io.sockets上io.sockets
。 在你的代码中,这将是
socket.sockets.on('connection', function (client) { client.send("hello") console.log("hello", client) })
您应该使用io
而不是socket
作为var名称以避免混淆。
里卡多·托马西是正确的,拯救了我的生命,我疯了。
尽pipe事情发生了变化,但我们在2013年仍然有一个问题(从2年开始)
可能是有所改变,无论如何注册'连接'事件我不得不这样做:
var openSocket = function (uniqueID) { var appSocket = io.connect('/'+uniqueID, { transports: ['websocket', 'xhr-polling']}); appSocket.socket.on('connect', function () { console.log('i did connect.'); }); return appSocket; };
以下为我做了一个窍门:socket.io-client:“^ 0.9.16”
io.connect("http://localhost:4000", {'force new connection': true});
现在“连接”事件一直触发,没有重用。
我通过检查socket.io-client / lib / io.js行得出了这个选项:192因为我甚至无法在github中find这个io.js文件,我认为在将来的版本中会有重构,而且这个选项可能不会工作。
至less这可能会有助于那些将采取这种临时工作的人。