游戏中聊天推送消息
【游戏中聊天推送消息】今天一下午,都在解决自己之前的bug,聊天推送消息推送不出去。
首先自己有一个误区,以为所有的玩家都是从同一个前端服务器进入游戏的;其次,自己没有真正理解pomelo推送消息的机制。造成了自己多次修改聊天系统。
先来说说前端服务器吧,玩家在进入游戏的时候,游戏服务器会自动分配一个前端的服务器,即connector 服务器,在配置文件中,肯定会有多个connector服务器的。所以玩家在进入房间的时候,channel.add( uid, sid );
这里的sid 不会是一样的。
然后是,在推送消息的时候,如果是全频[所有的频道即所有的房间]推送消息的话,最好使用channel.pushMessage('onGlobalChat', msg);
如果是针对性的推送消息的话,则最好使用channelService.pushMessageByUids(method, msg, uids, opt,cb) 方法。
文章图片
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对象上。
这样才是完整的推送消息的过程。
今天就写到这里,继续阅读源码。。。
待续。。。
推荐阅读
- 投稿|小红书下场做旅游和酒店,会不会有个好下场?
- 投稿|掌上Wegame退市,提不起劲的国内游戏平台
- 游戏玩得好,人生也能高大上
- C语言详解实现猜数字游戏步骤
- 丽江7日游小攻略
- 解构陌生人社交,「融云游戏房」上线
- 中国将办LOL|中国将办LOL S7全球总决赛,可玩广告最有效游戏营销
- 旅游|行程码消星救不了携程
- 沭阳游记--农村孩子进城
- 投稿|字节、鹰角、4399齐聚,塔防游戏突然升温?