游戏 服务器推送信息吗,游戏中聊天推送消息

本文讲述了作者修复聊天推送bug的经历,涉及前端服务器分配、Pomelo消息推送机制,强调了全频与定向推送的区别,以及如何根据uid和sid正确发送针对性消息的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

今天一下午,都在解决自己之前的bug,聊天推送消息推送不出去。

首先自己有一个误区,以为所有的玩家都是从同一个前端服务器进入游戏的;其次,自己没有真正理解pomelo推送消息的机制。造成了自己多次修改聊天系统。

先来说说前端服务器吧,玩家在进入游戏的时候,游戏服务器会自动分配一个前端的服务器,即connector 服务器,在配置文件中,肯定会有多个connector服务器的。所以玩家在进入房间的时候,channel.add( uid, sid );这里的sid 不会是一样的。

然后是,在推送消息的时候,如果是全频[所有的频道即所有的房间]推送消息的话,最好使用channel.pushMessage('onGlobalChat', msg); 如果是针对性的推送消息的话,则最好使用channelService.pushMessageByUids(method, msg, uids, opt,cb) 方法。

8aa57ff85703

pushMessage方法使用方便,不需要获取角色的信息,直接就可以推送。

pushMessageByUids 方法,需要获取到接收玩家的uid [我这里是玩家的账户ID],

在这里还需要知道一个变量,channel.groups .这个变量保存着所有前端服务器里的所有在线玩家的uid.   groups结构如下:

{'connector-server-1' : [1,2,3,4], 'connector-server-2' : [5,6,7,8],,,,,}

推送消息的对象可能不在同一个前端服务器。

uid 的结构是 [ {uid : 1, sid : 'connector-server-1'}, {uid : 2, sid :'connector-server-2'},,,,,]

for( var i = 0; i < sendTarget.length; i++)

{

for( var key in groups ){

for(var j = 0; j < groups[key].length; j++)

{

if( sendTarget[i]['uid'] == groups[key][j]){

sendTarget[i]['sid'] = key;

}

}

}

}

加入你已经获取到所有接收消息玩家的 uid 数组: sendTarget

sendTarget结构: [ { uid  : 1 },{ uid : 2 },,,,]

上面的过程就是将sid 加到sendTarget对象上。

这样才是完整的推送消息的过程。

今天就写到这里,继续阅读源码。。。

待续。。。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值