游戏服务器组间的通讯
网络游戏世界的构建有越来越大的趋势,游戏设计者希望更多的人可以发生互动。技术人员的工作就是满足这些越来越 BT 的需求。
我们目前这个项目由于是自己主导设计,而我本人又是技术方案的设计者。所以,技术解决不了的问题就不能乱发牢骚了。作为游戏设计者,我希望整个游戏世界的参于者可以在一个唯一的大世界中生存,他们永远有发生互动的可能。注意这里只是保留这种可能性,实际上,即使是现实社会,每个人的社交圈子都不大。即使是千军万马的战场上,无论是将军还是士兵,都不需要直接跟太多人互动。
我们的游戏的技术解决方案仍旧是将游戏大世界分成若干独立服务器组,人为的将人群切分成更小的独立单位。这里,技术上需要解决的是:服务器组间可以灵活的交换数据。
最近几天正是在设计服务器组间的通讯方案,初步的想法是在每个服务器组中安放一个独立服务进程,称之为“邮局”。各个服务器组中邮局之间可以相互发现并交换数据。
服务器组内部的各个进程通过向邮局投递或收取邮件来跟其他服务器组通讯。这个邮局提供类似 POP3/SMTP 的服务。实际上,我在通讯协议设计上,几乎照搬了 POP3/SMTP 。不过,在原有协议上加了一个强制的回执。这个对内部交互通讯的可靠性非常重要。
有了这样的设计,各种玩法的实现就会比较容易。比如对于玩家的迁徙,只需要在每个服务器组内设置一个“移民局”。玩家迁徙请求发出时,系统发出邮件到对方的“移民局”,把玩家数据 copy 过去。等到回执后,再要求玩家在新服务器组上登陆。同样,玩家物品的转移和商业系统也可以依靠专门的“联邦快递”进行。
邮局系统可以以单个队列来完成其它模块的请求,用时间来换取低负载。只要不设计出高度要求交互的跨服务器组玩法,这些应该是足够满足要求的。
有了邮局系统,我们甚至不再需要庞大的全局数据库。每个服务器组保留自己独立的数据库。只在发生交互的时候相互用邮件交换数据。全局的统计也可以由互发邮件来完成。
Comments
Posted by: Albert | (21) August 3, 2011 06:10 PM
Posted by: langzi | (20) December 13, 2007 02:34 PM
Posted by: Aura | (19) October 24, 2007 04:23 PM
Posted by: Cloud | (18) October 17, 2007 11:35 PM
Posted by: lbaby | (17) October 17, 2007 04:15 PM
Posted by: yongzhi.wu | (16) September 20, 2007 02:23 PM
Posted by: Cloud | (15) September 13, 2007 12:14 AM
Posted by: 大飞 | (14) September 12, 2007 04:52 PM
Posted by: jefferylush | (13) August 8, 2007 05:40 PM
Posted by: Anonymous | (12) July 27, 2007 11:04 AM
Posted by: 安德尔斯 | (11) July 9, 2007 08:16 AM
Posted by: harrymoo | (10) July 7, 2007 12:24 PM
Posted by: sunway | (9) July 6, 2007 05:07 PM
Posted by: cat | (8) July 6, 2007 04:17 PM
Posted by: david | (7) July 6, 2007 01:13 PM
Posted by: 锋寒 | (6) July 6, 2007 09:59 AM
Posted by: Anonymous | (5) July 6, 2007 09:58 AM
Posted by: spring | (4) July 5, 2007 11:20 PM
Posted by: Cloud | (3) July 5, 2007 10:14 PM
Posted by: analyst | (2) July 5, 2007 10:11 PM
Posted by: sheep | (1) July 5, 2007 10:00 PM