请教一个关于服务器逻辑线程处理消息的问题

游戏服务器中,逻辑线程从队列中取到消息包,而这个消息包中有读操作,一般游戏服务器是怎么处理这样的消息逻辑的,流程是怎么样的?

作者: fanflash   发布时间: 2011-05-26

一般都是, 有读的操作, 先读包头, 然后根据包头读取数据。

读完之后, 再根据,协议分发处理

作者: ilysony   发布时间: 2011-05-26

E,不好意思我问题,没说清楚,我的意思是这样的:
这个消包有读的操作,比如读数据库,这个消息包所要处理的逻辑依赖于这个从数据库中读出的数据。

那么一般就要求数据库操作线程去读这个数据,因为使用的是非阻塞模式,这时这个消息的逻辑处理就断掉了。

可能要在N个主循环后这个数据才读到,这时数据虽然读到了,但我怎么去进行读到数据之后,下面的处理逻辑(这问题在单线程时就不是问题了),因为我可能不知道这个数据是那个时候,那个消息要去去读的。

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

上面的情景是举例,实际如果只有简单的一两条读操作,我还是可以保证他执行正确的。
但实际情况中,一个逻辑里可能有非常多非即时性的读操作的,而且这些数据有对上下文的依赖关系。
我想问的就是,现在的网络游戏中这一块的处理方式,我想是不是有一种统一的架构,可以让我们在写逻辑时,不用去考虑这些异步问题。

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

我现在想到的方法是,一条消息过来后,我会建立一个状态机,这个状态机保存着这个逻辑所需要的数据和有需要用到的上下文环境,及这个逻辑所处于的状态,直到这个逻辑完全执行完后删除。

作者: fanflash   发布时间: 2011-05-26