2

我正在使用socket.io-emitterfor 循环将事件广播到一组频道:

在文件中,我有:

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

module.exports = {
  exampleFunction: function(req, res, next) {
    var channels = req.param('channels'),
        data = req.param('data');

    for (var i=0; i<channels.length; i++) {
      io.to(channels[i]).emit('example event', data)
    }
  }
}

app.js中,我有socket.io-redis

io.adapter(socketio_redis({ 
  host: 'localhost', 
  port: 6379,
  pubClient: redis.createClient(6379, '127.0.0.1'),
  subClient: redis.createClient(6379, '127.0.0.1')
}))

当我尝试运行时exampleFunction,我在控制台中收到以下未捕获的错误:

Error: 348 trailing bytes
    at Object.decode (C:\Users\Website\socket.io-redis\node_modules\msgpack-js\msgpack.js:200:47)
    at Redis.onmessage (C:\Users\Website\socket.io-redis\index.js:93:24)
    at RedisClient.EventEmitter.emit (events.js:106:17)
    at RedisClient.return_reply (C:\Users\Website\node_modules\redis\index.js:672:22)
    at ReplyParser.<anonymous> (C:\Users\Website\node_modules\redis\index.js:309:14)
    at ReplyParser.EventEmitter.emit (events.js:95:17)
    at ReplyParser.send_reply (C:\Users\Website\node_modules\redis\lib\parser\javascript.js:300:10)
    at ReplyParser.execute (C:\Users\Website\node_modules\redis\lib\parser\javascript.js:211:22)
    at RedisClient.on_data (C:\Users\Website\node_modules\redis\index.js:534:27)
    at Socket.<anonymous> (C:\Website\node_modules\redis\index.js:91:14)

我已经看到这是来自 msgpack。你们有没有人遇到过这个错误?你是怎么解决的?

谢谢你。

4

4 回答 4

0

好的,我们找到了解决方案。参考: https ://github.com/Automattic/socket.io-redis/issues/17

如您所见,socket.io-emitter 要求您在 redis 客户端上将 return_buffers 设置为 true。

让我知道这个是否奏效。否则我可以在代码中进一步区分。

于 2014-07-17T17:37:01.370 回答
0

nm.socket.io-redis的主页上写着:

Msgpack 给我们一个称为“尾随字节”的错误。阅读后我们意识到我们可以只使用 JSON.stringfy/JSON.parse 而不是 msgpack。

这看起来像你得到的错误。正如那里建议的那样,尝试JSON.strigfy

于 2014-07-13T11:28:47.290 回答
0

这应该回答你的问题。 https://github.com/Automattic/socket.io-redis/issues/17

于 2014-07-21T14:44:12.507 回答
0

这帮助我解决了Error: -560815898 trailing bytes错误:

  1. npm install msgpack-js-v5
  2. node_modules/socket.io-redis/index.js在最顶部更改文件:

    var msgpack = require('msgpack-js');

    var msgpack = require('msgpack-js-v5');

  3. 现在使用与此类似的代码:

    var adapter = require('socket.io-redis');
    var pub = redis.createClient(6379, 'localhost');
    var sub = redis.createClient(6379, 'localhost', { return_buffers: true });
    io.adapter(adapter({pubClient: pub, subClient: sub}));
    

更新:

在某些日子里,我偶然发现了一个错误bops.readUInt64BE is not a function,所以最终我切换msgpack-js-v5msgpack5现在它可以正常工作了。

于 2016-11-02T11:04:48.600 回答