- 59
- 0
在写一个聊天程序,通过websocket发送信息,服务端收到信息,将信息存到redis中,触发pub发布事件,sub订阅事件,从redis中拿信息。
// redis
const redis = require("redis");
const redisConf = require('../redis/conf').conf;
// 发布者
const pub = redis.createClient(redisConf);
// 订阅者
const sub = redis.createClient(redisConf);
function initSocket(WebSocket){
// 引用Server类:
const WebSocketServer = WebSocket.Server;
// 实例化:
const wss = new WebSocketServer({
port: 3001
});
/**
* 监听socket连接
*/
wss.on('connection',function(ws,req){
// redis订阅事件
sub.on('message', function(channel, message) {
})
ws.on('message', function incoming(message) {
.. 先把message存redis中
saveIntoRedis(message)
// 发布通知
pub.publish('sendMsg',JSON.stringify(message))
}))
/**
* 断开连接
*/
ws.on('close',function(){
});
});
}
module.exports = {
initSocket
}
当我的pub和sub都定义在头部的时候,会出现一个bug,当我的socket断开重连后,每次订阅事件会重复触发2次,再重连socket,订阅事件会重复触发3次...依次类推。
当我把sub的创建放到socket连接成功回调中,如下
/**
* 监听socket连接
*/
wss.on('connection',function(ws,req){
// 订阅者
const sub = redis.createClient(redisConf);
})
就正常了,是什么原因呢。
1
打赏
收藏
点击回答
网站公告
- 扫一扫访问手机版
回答动态

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器更新之后。服务器里面有部分玩家要重新创建角色是怎么回事啊?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题函数计算不同地域的是不能用内网吧?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题ARMS可以创建多个应用嘛?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题在ARMS如何申请加入公测呀?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题前端小程序接入这个arms具体是如何接入监控的,这个init方法在哪里进行添加?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器刚到期,是不是就不能再导出存档了呢?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器的游戏版本不兼容 尝试更新怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器服务器升级以后 就链接不上了,怎么办?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器转移以后服务器进不去了,怎么解决?预计能赚取 0积分收益

- 神奇的四哥:发布了悬赏问题阿里云幻兽帕鲁服务器修改参数后游戏进入不了,是什么情况?预计能赚取 0积分收益
- 回到顶部
- 回到顶部

