ASP源码.NET源码PHP源码JSP源码JAVA源码DELPHI源码PB源码VC源码VB源码Android源码
当前位置:首页 >> 软件工程 >> 31 经典消息pipeline

31 经典消息pipeline(1/23)

来源:网络整理     时间:2016-02-01     关键词:

本篇文章主要介绍了"31 经典消息pipeline",主要涉及到方面的内容,对于软件工程感兴趣的同学可以参考一下: 1.写在前面   既然是游戏服务端程序员,那博客里至少还是得有一篇跟游戏服务端有关的文章,今天文章主题就关于游戏服务端。  写这篇博客之前也挺纠结的,一方面是...

 

1.写在前面

  既然是游戏服务端程序员,那博客里至少还是得有一篇跟游戏服务端有关的文章,今天文章主题就关于游戏服务端。

  写这篇博客之前也挺纠结的,一方面是因为游戏服务端其实不论架构上还是具体一些逻辑模块的构建,都属于非常成熟的技术,举个简单的例子,像端游的多zone/scene/game进程+单全局进程架构,网上随便一搜能搜出来几十篇内容差不多的。另一方面是因为中国特色MMO基本上把服务端程序员整成了业务逻辑狗,很多明星团队的业务狗基本上从入职第一天开始就成天写lua、写python,纯写lua/python,你是完全无法辨别一个程序员的vision强弱区别的,结果论资排辈导致vision弱的上去了。(也许vision强的出去创业了?)你就会发现,游戏服务端的话语权到底是被谁占据了。

   

  在我看来,游戏服务端程序员容易陷入两个误区:

  第一,游戏服务端实际上要解决的并不是性能问题。一方面,即使是千人同屏的端游(姑且不论这千人同屏是不是一个中国特色的伪需求,反正我是没法将千人同屏跟游戏乐趣联系在一起的),其服务端如果进程划分得当,一个场景进程也至多只有千级别entity的压力,性能问题退化为了逻辑狗的业务素养问题。另一方面,现在端游MOBA和手游时代,开房间式场景同步已经成为主流,各种逻辑狗进化来的资深人士不需要也没必要将性能挂在嘴边了。

  第二,大部分游戏服务端所谓框架的定位有误。服务端框架的设计有好有坏,判断一个设计好不好没有普适统一的标准,但是判断一个设计烂不烂一定是存在一个标准线的。简单列举几种烂设计:

  烂设计基础版本。帮你定义好框架中的几种角色,你要么全盘接受,要么全不接受,不存在中间状态。但是,提供一种简单的通信机制,以及外部与框架通信的clientLib。或者能让你定制开发其中一种角色,可以写外部driver。这样,虽然架构丑一点,至少还能提供一定程度的扩展性。

  烂设计进阶版本。除了满足基础版本的定义之外,还具有一些额外的烂特点:框架中的角色定义的特别二逼,举个例子,基础版本的烂设计在角色定义上可能只是大概区分了Db代理进程、Gate进程、逻辑进程,但是进阶版本会对逻辑进程进行区分,定义了不同的逻辑进程角色。这意味着什么?意味着我想写一个简单的单逻辑进程游戏是没办法用这个框架的,因为框架默认就集成进来了一堆莫名其妙的东西。更有甚者,我想要添加一种角色,是需要动手去改框架的。

   

  说实话,正是由于这类设计的存在,我在看到类似于“游戏服务端技术含量不高”这类论断的时候,总感觉辩无可辩,因为就这两种设计而言,我甚至除了代码逻辑复杂度之外看不到跟本科毕设级别的游戏服务器有什么区别。

  不知道算是不幸还是幸运,前段时间亲眼目睹了上述提到的某种设计的从无到有的过程。当然,今天写此文的目的不是为了将这种设计批判一番,每种设计的诞生都是与各种因素相关的,我们不能站在上帝视角去评判这个过程。今天写此文,是希望对自己这整整一年半的游戏服务端编码历程中的一些所思所惑做个整理,希望能带各位看官从另一个思路看游戏服务端。

 

2.游戏服务端究竟解决了什么问题?

  从定义问题开始,简单直接地说,一套游戏服务端开发框架应该具有下面两种能力:

  • 定义了client到server、server到client、server到server的消息pipeline。
  • 描述了游戏世界状态的维护方式。

 

  下面就从这两点来展开这篇文章。

 

3 消息pipeline

3.1 经典消息pipeline

3.1.1 场景同步

相关图片

相关文章