问题 socket.on('connection'...事件从未触发nodejs + express + socket.io


问题 socket.io不工作

细节

  • 生成一个项目 express [folder]; cd [folder]; npm install;
  • 设置socket.io npm install socket.io
  • 使用以下代码运行节点应用程序
  • 客户  事件引发但服务器 连接 永远不要开枪。

建立

  • 服务器 AWS Free Tier,Ubuntu 11.10,ami-a7f539ce
  • nodejs v0.6.5
  • 表达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);           
 });

为什么是 连接 事件从未被解雇?


3604
2017-12-08 01:03


起源

io.connect('http://example.com:3000')  - > io.connect('http://localhost:3000') ? - Ricardo Tomasi
example.com是故意的,不是在这里公开我的服务器。对不起,没有澄清。 - Gaston
你确定其余的代码是否正常工作?你有看到 任何 消息? - Tadeck
@Tadeck它真的很奇怪,看看socket.io调试它似乎工作正常,不是吗?但 连接 事件永远不会被解雇。 SSH终端屏幕 - Gaston
@Gaston:谢谢。 - Tadeck


答案:


花了一段时间才注意到...... connection 事件发生了 io.sockets。在你的代码中,这将是

socket.sockets.on('connection', function (client) {
  client.send("hello")
  console.log("hello", client)
})

你应该用 io 代替 socket 作为var名称,以避免这种混乱。


12
2017-12-08 01:37



example.com是故意的,不是在这里公开我的服务器。对不起,没有澄清。 - Gaston
非常感谢! - Gaston
我有同样的问题。但是Windows机器正在运行socketio.listen(server).on('connection',function(socket){});但是mac os不起作用。 - S. Ferit Arslan


里卡多托马西 是对的,救了我的命,我疯了。

最近发生了变化,我们是在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;
};

1
2018-06-23 00:11





以下为我做了一个技巧:socket.io-client:“^ 0.9.16”

io.connect("http://localhost:4000", {'force new connection': true});

现在'connect'事件一直触发,没有重复使用。

我通过检查socket.io-client / lib / io.js行来找出这个选项:192 由于我甚至无法在github中找到这个io.js文件,我认为在将来的版本中会有重构,而且这个选项可能不起作用。

至少这可能对那些将暂时解决这个问题的人有所帮助。


1
2018-04-01 22:40



也适用于v0.9.17 ...谢谢 - Tommaso Bertoni