socket.io-redis尾随字节

我正在使用socket.io-emitter将一个事件广播到一个带for循环的通道:

在文件中,我有:

 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。 你有没有遇到过这个错误? 你是怎么解决的?

谢谢。

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

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

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

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

正如你所看到的,socket.io-emitter需要你在你的redis客户端上设置return_buffers为true。

让我知道这个是否奏效。 否则,我可以在代码更多。

这帮助我与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-v5切换到msgpack5 ,现在它工作正常。