javascript - socket.io-redis 在 redis 3.0.6 中出现尾随字节错误

标签 javascript node.js sockets redis socket.io-redis

我正在使用 phpredis 通过 pubsub 方法将数据发送到 node.js。将 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,但错误仍然存​​在。

我已遵循 this thread 中建议的解决方案, 但它们不起作用。

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.在上一篇文章中建议将依赖项更改为 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 - socket.io-redis 在 redis 3.0.6 中出现尾随字节错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34676062/

相关文章:

node.js - 如果 wolkenkit(或任何)事件源事件是非结构化的,会有问题吗?

google-app-engine - 使用Java-apns时,Google App引擎SSL套接字崩溃

javascript - 在Webworker中使用AJAX加载javascript资源

javascript - 如何从 Slick Slider 中删除类?

javascript - react 无状态组件不渲染

node.js - 无法安装 Bower 包

javascript - 如何将 JSON 响应的特定元素插入数组?

对 nodejs 服务器的 C++ POST 请求失败(基于套接字)

sockets - 编写一个程序来形成自己的IP数据包需要什么?

javascript - Bootstrap Modal 在页面加载时触发,每个用户一次