mir3思考

游戏服务器收到客户端的消息,怎么转发到对应的对象上?

答:在SockMsg_GateComm.cpp中一个专门处理网关消息的线程,网关和GameSvr之间维护一个用户的id,消息头带上Id,当网关消息传来,并且判断处于游戏中时,通过ID(也是用户信息数组的索引)取得【用户信息对象】,消息交由【用户信息对象】,该对象判断消息类型,并作适当的参数构造后,交由它引用的CCharObject的消息队列中。

游戏服务器如何驱动所有的游戏对象更新自己的逻辑?

答:服务器在开启时,启动了4个线程,分别为登入、玩家、怪物、NPC,后三个线程都在while循环中一直调用游戏对象的Operate,相当于Unity的Update。

游戏服务器怎么向指定客户端发消息?

答:由每个具体的服务器游戏对象维护的,如上述,当客户端的消息传发给对应的服务器游戏对象后,消息消亡了,用于逻辑处理了,逻辑处理中可能会产生新的消息需要通知客户端,将调用SendSocket方法,字节(肯定包含用户id标识)被加入到对应的网关信息对象(CGateInfo)的消息队列中,网关信息对象在玩家线程中更新,发送消息队列的消息。

未完待续...

猜你喜欢

转载自blog.csdn.net/yangxun983323204/article/details/81118608