http://www.linuxfans.org/nuke/modules/Forums/files/d_3.png
在上面那个图片中,从Internet来的data经过unpack后,得到了object(id)和message,我想,也许可以扩展一下,一个data里可以有多个object(id)和message,也就是说,unpack后得到的是{object(id)}和{message}这两组数据。
这样,这两个数据组之间就会有对应关系:
(从id到message的对应关系):
1对1
多对1
1对多
多对多
其中,1对1是最基本的对应关系。
多对1,它的典型应用是大范围的魔法,也就是同时对多个对象产生了作用。
1对多,可以理解为一个任务队列,也就是用户(客户端)一次性发出了多个操作请求(顺序相关)。
多对多,我目前还不知道怎么理解。如果不使用这种对应关系,那么就得在程序里建立一个筛选的机制。
这两种对应关系,我还在犹豫,是使用,还是忽略这样的数据。
另外,考虑到游戏里的一些重复操作,比如反复地练习使用某个魔法,不停地制造某个物品,或制造一定数量的物品,这些操作,每次都是一样的操作请求,事实上,目前的网络游戏里,很多玩家都使用连点器来挂机,但是这样还是要占用网络带宽和服务器处理网络的资源,所以干脆,如果要在哪练习某个技能,也就是挂机,那么向服务器明说就是了,用户说运行这些指令多少次或一直运行下去,然后就不需要网络操作了。
我把相关的东东总结了一下(主要是一系列的操作请求的特点):
展开态:比如有n个操作请求,那么就向服务器发出n个data。
折叠态:比如有n个相同的操作请求,那么只向服务器发出一个data,其中包含的内容是:操作请求,执行的次数。
展开态中还有两种:把n个操作请求分别发出;把n个操作请求放进一个data里发送出去。
折叠态中也有两种:反复执行的只是一个操作请求;反复执行的是一些操作请求。
这样便有了几个问题:
各个状态间的转换
每个状态的运行态
目前我的难点在于:折叠态的运行态不知道该怎么实现。因为要把折叠态的一系列操作请求作为数据保存在执行者的队列中,而且每个原子操作都是要“花时间”的(不然一个折叠态的操作就完成了外挂的加速功能了

),所以不能使用for循环之类的了,那么最容易想到的是这样的方案:对于反复执行的一个请求,在这个队列元素中增加一个数据成员以保存还要执行多少次,于是执行时,先检测还要运行多少次,只要大于0那么就再运行一次,并且使这个次数减1,如果这个次数为0,那么就不运行并且将当前队列元素删除转而运行下一个队列元素。这个方案我不太满意,因为每次运行都有计数操作,在一个有几大百玩家和N个NPC的网络游戏里,这样的计数操作我很担心其对性能的影响。
各位发表发表意见吧~
