彩虹网络游戏

娱乐热线:请查询网站
新闻动态
新闻动态 您当前的位置:首页 > 新闻动态

彩虹网游教你编写游戏服务器框架

来源:彩虹网游 发布时间:2019/4/8 20:48:45 浏览次数:3
  • 分享到:

     使用异步非阻塞编程可以真正实现良好的性能。但在代码中,它不是很直观。因为任何可能阻止的操作必须通过回调函数链接。例如,如果玩家登录,则需要先读取数据库,然后读取远程缓冲服务器(如redis),然后返回登录结果:username,level...在此过程中,有两种可能阻止操作。您必须将登录程序划分为三个函数:一个是从客户端数据包接收回调,第二个是读取数据库回调,第三个是读取缓冲服务器回调。

12.jpg

  在这种情况下,代码被置于三个功能中,这对读者来说是一种负担。因为我们读取代码,比如通过日志,coredump来查找问题,经常直接进入函数。切入和读取的函数可能是回调函数。很难理解为什么调用这个函数以及它属于哪个进程。

  另一个负担是开发过程。我们知道回调函数的代码需要“上下文”,即启动回调时的数据状态。为了使回调函数获得启动器函数的可变内容,我们必须将变量内容放在“上下文”变量中并将其传递给回调函数。由于业务逻辑的变化,需要传递的上下文变量将不断变化?!胺湃搿焙汀叭〕觥鄙舷挛牡闹馗幢嗦胍彩且恢种馗幢嗦牍ぷ?。并且上下文本身的设置可能不安全,因为您无法预测哪个回调函数将修改上下文对象,这也是许多难以调试的BUG的来源。

  为了解决这个问题,出现了所谓的合作技术。我们可以将协同处理技术视为向我们提供特殊的退货声明:收益率。此语句将从函数返回,如return,但您可以使用另一个特殊语句resume(id),从yield语句下面开始运行代码。更重要的是,在恢复之后,可以连续访问前一个整个函数中的所有临时变量。

  当然,在执行resume(id)时,它必须位于进程的所谓“主循环”中,并且此ID参数表示已被中断的函数。这个可中断的函数调用过程称为协同过程。这个ID代表了一些财团。异步调用的上下文变量自动被协处理函数的“堆栈”替换,也就是说,协处理函数中的所有局部变量都自动成为上下文的内容。因此,您不必一次又一次地编写“放入”和“取出”上下文内容的代码。

12.1.jpg

  01

  组件模型

  一般来说,服务器主要运行各种代码处理请求(通常称为Handler)。但是,我们还有一些需要连续运行的逻辑代码,例如处理匹配玩家战斗的逻辑,检查玩家是否停留时间,循环支付订单等。这些代码非常通用,需要由各种处理程序调用。因此,我们必须有办法让所有这些自定义代码以标准方式相互引用,并管理生命周期。

  借鉴Unity,我认为使用所谓的组件模型是件好事。其特点包括:

  组件通过Application::GetComponet(name)相互调用。使用字符串作为索引,您可以轻松地为您获取对象。组件本身通过Application::Register(com_obj)在系统中注册,注册名称通过字符串GetName()接口提供。

12.2.jpg

  02

  服务器对象

  由于游戏服务器,集成功能太多,例如配置不同的协议,不同的处理器,提供数据库功能等等。要启动这样的服务器对象需要大量的“汇编代码”。为了保存此代码,我将本地服务器类型设计为服务器模板,以简化网络层的组装。用户可以继承此类以实现各种服务器。

  这个简单的类可以通过setter方法自定义网络层的组件,否则它是最常用的TCP,TLV,Echo服务器。此外,此类继承自Application,因此可以使用组件系统在服务器上轻松安装数据库或其他组件。

  集群功能

  01

  需求分析

  游戏通常是最先进的服务。因此集群功能非常困难。

  有些框架试图将状态移出逻辑进程并将其放入缓冲服务器,但通常无法满足性能要求。其他框架将集群定义为固定层次结构,尝试通过复杂的消息转发规则“向加载的进程发送请求”。



(来源:彩虹网游)
标签:

上一篇:彩虹网游春季赛今日正式开赛
下一篇:如何才能提高中小团队游戏立项成功率?

相关产品
  • 我的世界之神游

    我的世界之神游
  • 王的崛起单局制h5

    王的崛起单局制h5
  • 焚天之怒h5游戏2.0版

    焚天之怒h5游戏2.0版
  • 第五人格传奇手游

    第五人格传奇手游
  • 刺激神吃鸡手游战场

    刺激神吃鸡手游战场
  • 贪玩蓝月传奇

    贪玩蓝月传奇
  • 传奇世界网页版

    传奇世界网页版
  • 魔兽之争霸单机

    魔兽之争霸单机
  • 虐杀黑原形

    虐杀黑原形
全球彩票