消息分发

在网游服务器中客户端与服务器的通信是非常频繁的,客户端发过来的每一个消息(假设为proto消息),服务器收到后都可能要做相应的处理并且调用相应的函数(先到网关再转发到对应的服务器)。那么怎么样定义这一行为或者说怎么样来抽象这种行为,并且具有良好的可扩展性。比如对于好友消息的管理,有请求添加好友消息、删除好友消息等一系列消息。

#define reg_friend_cmd(cmd_type) \

    ProtoCmdHandler::user_cmd_dispatcher.cmd_reg<Friend::cmd_type>(bind(&FriendCmdHandle::on_##cmd_type, this, _1, _2));

class FriendCmdHandle

{

 public:

    void init()

    {

        reg_friend_cmd(add_friend);

        reg_friend_cmd(del_friend);

        ...

    }

    bool on_add_friend(..., Friend::add_friend);

    bool on_del_friend(..., Friend::del_friend);

    ...

};

上述示意代码中Friend是个proto包名,其中消息注册部分reg_friend_cmd和之前的文章提到的函数注册类似,但是消息注册更为复杂,它把消息处理函数on_×××传给了ProtoCmdHandler,然后在ProtoCmdHandler类中又做了很多处理,但是原理和函数注册差不多,都是使用了一个map把消息处理函数存起来,如果客户端发过来一个消息,就根据这个消息的类型去查看这个map,找到了便执行相关处理函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值