zoukankan      html  css  js  c++  java
  • Pomelo杂记(二)

    1、访问后端服务器handler
    -------------------------------------

    客户端也可以直接调用后端服务器的handler,但是内部实际上是先连接到前端服务器,在components/server.js中执行

    app.sysrpc[routeRecord.serverType].msgRemote.forwardMessage

    通过rpc调用后端服务器的forwardMessage方法(/game-server/node_modules/pomelo/lib/common/remote/backend/msgRemote.js),在forwardMessage方法中重新调用后端服务器的

    server.handle方法以调用客户端的目标方法.

    frontend服务器forward消息的地方在:
    https://github.com/NetEase/pomelo/blob/master/lib/server/server.js#L178

    backend服务器接收消息的地方在:
    https://github.com/NetEase/pomelo/blob/master/lib/common/remote/backend/msgRemote.js#L20

    -------------------------------------

    2、rpc调用
    -------------------------------------

    pomelo 是一个多进程相互协作的环境,rpc服务,让frontend 能够调用backend 的方法

    self.app.rpc.chat.chatRemote.add(session, uid, self.app.get('serverId'), rid, true, function(users){
            
        next(null, {
                
            users:users
            
        });
        
    });

    rpc调用传递的第一个参数session,主要用于计算出路由,以确定请求要发到哪台服务器,也就是说第一个参数只用来route,所以不一定需要传递session对象(可以是其他值),

    路由设置app.route('chat', routeUtil.chat);参见routeUtil,此参数在remote里面是没有接收的。

    -------------------------------------

    3、广播channel

    -------------------------------------

    Channel是服务器端向客户端推送消息的通道。Channel可以看成一个玩家id的容器,通过channel接口,可以把玩家id加入到channel中成为当中的一个成员。之后向channel推送消

    息,则该channel中所有的成员都会收到消息。Channel只适用于服务器进程本地,即在服务器进程A创建的channel和在服务器进程B创建的channel是两个不同的channel,相互不影

    响。

    chanelService保存自定义的频道名,每个频道里保存前端服务器的ID:sid和每个用户的ID:uid在groups,groups[sid]取得所有通过同一个前端服务器登陆的uid。

    0.5版本后加入了globalChannel,它提供全局的channel服务,其默认实现是通过redis将相关信息存储,开发者可以根据自身需求开发其它实现;Pomelo原有的channelService只能在具体某个服务器中创建channel,这种channel只能存储该服务器的用户信息,而globalChannelService则可以创建全局的globalChannel,所有服务器的用户信息都可以通过globalChannel进行存储。

    -------------------------------------

    4、通信加密

    -------------------------------------

    目前,pomelo通讯数据时没有进行加密的,通信数据需自行加密,当然如果使用protobuf也等于加密了数据

    -------------------------------------

    5、async控制流

    -------------------------------------

    异步的机制决定,pomelo里面要涉及到工作流控制,一般使用async控制流,常见方法如下

    1.parallel方法是并行执行一组异步函数,这些函数之间没有顺序上的差异,如果其中一个返回err,则最终的callback返回err 和每个函数返回值组成的数组。

    2.series方法是顺序执行一组异步函数,每个函数必须在上个函数执行完才开始执行,如果其中一个返回err,则之后的函数不在执行,并且最终的callback会立刻并返回err.

    3.waterfall方法和series一样都是顺序执行一组异步函数,不同的是每个函数执行完毕须把结果传递给下个函数,下个函数可能对上个函数的结果有依赖。

    -------------------------------------

  • 相关阅读:
    [置顶] 搭建一个流媒体服务器引子
    Exchange Server 2007 常见问题解答(6)
    [置顶] 第九周项目1
    iOS 6应用开发实战
    hdu 1722(数论)
    js二维数组排序
    HDU 4027 线段树 Can you answer these queries?
    Socket编程指南及示例程序
    Spring攻略学习笔记(2.13)解析文本消息
    线性渐变lineargradient和滤镜opacity/filter的透明效果兼容性解决方案及其RGB/RGBA与16进制转换方法
  • 原文地址:https://www.cnblogs.com/bbsno1/p/3257836.html
Copyright © 2011-2022 走看看