无法让socket.io-emitter与socket.io-redis配合使用

3
我有一个非常简单的代码,试图从外部进程发射到一个socket.io服务器。

server.js

var io = require('socket.io')(3201);
var redis = require('socket.io-redis');
io.adapter(redis({ host: 'localhost', port: 6379 }));

io.on('connection', function (socket) {
  console.log("test 1");
  socket.on('testemit', function (data) {
      console.log("test 2");
      console.log(data);
  });
});

客户端,emit.js(在文档中找到):

var io = require('socket.io-emitter')({ host: '127.0.0.1', port: 6379 });
setInterval(function(){
      io.emit('testemit', {a: 'aaa'});
}, 3000);

在服务器端,如果我使用以下方式运行它:
 DEBUG=* node server.js

我得到的全部内容是:
socket.io:server initializing namespace / +0ms
  socket.io:server creating http server and binding to 3201 +3ms
  socket.io:server creating engine.io instance with opts {"path":"/socket.io"} +1ms
  socket.io:server attaching client serving req handler +2ms
  socket.io-parser encoding packet  aaa {"type":2,"data":["testemit",{"a":"aaa"}],"nsp":"/"} +0ms
  socket.io-parser encoded {"type":2,"data":["testemit",{"a":"aaa"}],"nsp":"/"} as 2["testemit",{"a":"aaa"}] +1ms

但是testemit中的回调根本没有被调用。我错过了什么吗?

emit.js 在同一台服务器上运行,使用命令 "node emit.js"。 - memical
我完全误解了这个。所有的工作都正常。emit会向此socket.io服务器的所有socket.io客户端发出一个emit。 - memical
1个回答

4

我完全误解了这个。一切正常。

emit会向此socket.io服务器的所有socket.io客户端发出emit。

所以在浏览器中,它的工作方式如下:

        _socket = io.connect(url);
        _socket.on('testemit', function (message) {
            console.log('testemit');
            console.log(message);
        });

我错误地期望它在服务器上也能工作。


1
我曾经有同样的误解,我以为事件会被服务器“socket.io-redis”接收,但实际上并不是这样...它们是由连接到运行socket.io-redis的服务器的客户端接收的。 - Sebastien H.

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接