松鼠的博客

导航

统计

游戏服务器组间的通讯

转载自云风的BLOG

网络游戏世界的构建有越来越大的趋势,游戏设计者希望更多的人可以发生互动。技术人员的工作就是满足这些越来越 BT 的需求。

我们目前这个项目由于是自己主导设计,而我本人又是技术方案的设计者。所以,技术解决不了的问题就不能乱发牢骚了。作为游戏设计者,我希望整个游戏世界的参于者可以在一个唯一的大世界中生存,他们永远有发生互动的可能。注意这里只是保留这种可能性,实际上,即使是现实社会,每个人的社交圈子都不大。即使是千军万马的战场上,无论是将军还是士兵,都不需要直接跟太多人互动。

我们的游戏的技术解决方案仍旧是将游戏大世界分成若干独立服务器组,人为的将人群切分成更小的独立单位。这里,技术上需要解决的是:服务器组间可以灵活的交换数据。

最近几天正是在设计服务器组间的通讯方案,初步的想法是在每个服务器组中安放一个独立服务进程,称之为“邮局”。各个服务器组中邮局之间可以相互发现并交换数据。

服务器组内部的各个进程通过向邮局投递或收取邮件来跟其他服务器组通讯。这个邮局提供类似 POP3/SMTP 的服务。实际上,我在通讯协议设计上,几乎照搬了 POP3/SMTP 。不过,在原有协议上加了一个强制的回执。这个对内部交互通讯的可靠性非常重要。

有了这样的设计,各种玩法的实现就会比较容易。比如对于玩家的迁徙,只需要在每个服务器组内设置一个“移民局”。玩家迁徙请求发出时,系统发出邮件到对方的“移民局”,把玩家数据 copy 过去。等到回执后,再要求玩家在新服务器组上登陆。同样,玩家物品的转移和商业系统也可以依靠专门的“联邦快递”进行。

邮局系统可以以单个队列来完成其它模块的请求,用时间来换取低负载。只要不设计出高度要求交互的跨服务器组玩法,这些应该是足够满足要求的。

有了邮局系统,我们甚至不再需要庞大的全局数据库。每个服务器组保留自己独立的数据库。只在发生交互的时候相互用邮件交换数据。全局的统计也可以由互发邮件来完成。

 

相关参考:
http://blog.codingnow.com/2007/07/server_communication.html

posted on   Xproer-松鼠  阅读(385)  评论(0编辑  收藏  举报

编辑推荐:
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
阅读排行:
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了
点击右上角即可分享
微信分享提示