游戏中聊天推送消息

【游戏中聊天推送消息】今天一下午,都在解决自己之前的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对象上。
这样才是完整的推送消息的过程。
今天就写到这里,继续阅读源码。。。
待续。。。

    推荐阅读