socket.io-redis在redis 3.0.6中得到了尾随字节错误
我正在使用phpredis
通过pubsub
方法将数据发送到phpredis
将node.js升级到稳定版本4.2之后,我得到了来自socket.io-redis
模块的trailing byte
错误。
的node.js
var pub = redis.createClient(2222, '127.0.0.1',{no_ready_check: true}) pub.auth(redisPassword); var allsub = redis.createClient(2222, '127.0.0.1',{return_buffers: true,no_ready_check: true}) allsub.auth(redisPassword); allsub.subscribe('somekey'); io.adapter(RedisStore({pubClient:pub,subClient:allsub}));
错误:
Error: 256 trailing bytes at Object.decode (/usr/apps/js/node_modules/msgpack-js/msgpack.js:200:47) at Redis.onmessage (/usr/apps/js/node_modules/socket.io-redis/index.js:93:24) at emitTwo (events.js:92:20) at RedisClient.emit (events.js:172:7) at RedisClient.return_reply (/usr/apps/js/node_modules/redis/index.js:697:22) at ReplyParser.<anonymous> (/usr/apps/js/node_modules/redis/index.js:324:14) at emitOne (events.js:77:13) at ReplyParser.emit (events.js:169:7) at ReplyParser.send_reply (/usr/apps/js/node_modules/redis/lib/parser/javascript.js:302:10) at ReplyParser.execute (/usr/apps/js/node_modules/redis/lib/parser/javascript.js:213:22) at RedisClient.on_data (/usr/apps/js/node_modules/redis/index.js:550:27) at Socket.<anonymous> (/usr/apps/js/node_modules/redis/index.js:105:14) at emitOne (events.js:77:13) at Socket.emit (events.js:169:7) at readableAddChunk (_stream_readable.js:146:16) at Socket.Readable.push (_stream_readable.js:110:10) at TCP.onread (net.js:523:20)
为了找出问题,我已经将socket.io
降级到1.36,但是错误仍然存在。
我已经按照这个线程中提出的解决scheme,但他们不工作。
1.添加return_buffers:true对实例不起作用。
重启时会引起这个警告:
[nodemon] restarting due to changes... [nodemon] starting `node node.js` listening on *:3000 [TypeError: input.split is not a function]
2.在上一篇文章中build议将依赖关系改为msgpack-js-v5,但这不起作用,如下所示:
socket.io-redis的/ index.js
var msgpack = require('msgpack-js-v5');
socket.io-Redis的/的package.json:
"dependencies": { "async": "0.9.0", "debug": "2.2.0", "msgpack-js-v5": "*", "redis": "2.4.2", "socket.io-adapter": "github:automattic/socket.io-adapter#de5cba", "uid2": "0.0.3" },
这是从哪里冒出来的。 谁能告诉我如何解决它?
希望你redis是:
var redis = require('redis');
和RedisStore是:
var RedisStore= require(socket.io-redis);
还可以将主机端口添加到io.adapter中的RedisStore中,如:
io.adapter(RedisStore({ pubClient: pub, subClient: allsub, host: '127.0.0.1', port: 222 }));
它适合我…让我知道如果你有问题..
- 来自JavaScript的PostgreSQL套接字(HTML5)
- socket.io-client是否适合作为XSockets.NET服务器的套接字客户端?
- Socket.io中的通道
- 如何仅使用Net模块(不是socket.io)将消息发送到node.js中的单个客户端
- 什么因素导致数据在python(或python / node.js)的套接字中不通过?
- NodeJS数据报 – 接收IPv6多播
- 使用Node.js http.get时,套接字不会显示为closures状态
- 套接字在服务器端代码节点内发射
- AngularJS&Socket.IO – 从Service(发送到此处)到Controller的返回值是undefined || 承诺,asynchronous