在Message模块中针对移动通信的特点设计了 一个简单而高效的通信消息协议。 在消息协议的设计中,为了减少通信的流量,采用了字节流 的方式;将一条消息分为消息头和消息体两个部分。消息头的 长度是固定的,消息体的长度随着含有的属性的不同而变化。 从下面登录消息的例子可以看出一条消息的基本结构(表 l示)。 表l登录消息的结构 G锄eData Component的设计与实现 G棚eData componem中包含两个模块GameData和 GameDB,其中GameDB保存着整个游戏世界模型的所有状态数 据,G哪eData是它的一个子集,它保存在内存中,方便Govemor 直接存取,提高数据的访问速度。 服务器在同一时间会有很多的用户同时访问,用sen,let编 写的服务器应用程序默认以单实例多线程的方式工作,一个 servlet在第一次初始化时被装载并驻留在内存中,等待请求。 它为每个请求将生成一个新的线程,并发地响应所有来自不同 客户端的请求‘4]。当不同的线程同时访问同一个数据的时候 就会出现读脏数据、修改丢失等问题,进行同步控制时如处理不 当又容易出现死锁。线程的同步问题是服务器端编程中容易出 错及需要重视的地方。 具体实现时,将GameData设计成一个JAVA类,其中游戏 数据的属性都设置为privace,外部函数只能通过类提供的接口 函数对其进行访问和修改,利用JAVA语言的关键词synchr0. nized可以方便地对公共的接口函数实现同步控制,保证了数据 登录消息的消息头中包含如下属性:magic—num、g砌eId、 的一致性。