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
错误:
-
npm install msgpack-js-v5
-
在顶部更改文件
node_modules/socket.io-redis/index.js
:var msgpack = require('msgpack-js');
至
var msgpack = require('msgpack-js-v5');
-
现在使用类似这样的代码:
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
,现在它工作正常。