阅读天龙八部的代码有感----两种逻辑处理模式的比较

1: 天龙八部的逻辑处理模块:

  逻辑处理模块:

  void run

  {

   for(;;){

       select();  //epoll wait();

       process_inputs();

       process_commands();

       process_outputs();

       process_execeptions();

      }

  }

  天龙八部的SocketOutputStream 和 SocketInputStream 类设计最大程度的减少了内存拷贝,加上Packet/PacketFactory工厂模式的设计,在很多程度上面提升了单线程处理能力,无论是GameServer BIllingServer LoginServer 都几乎没有加锁的操作,这样也就最大程度上消除了线程调度的性能消耗;如果我们把这个模式引入到页游,那么就可以这样设计:我们将天龙八部的select 模型换成现在流行的epoll模型。

                          图1: 服务器的分布

    无论验证服,聊天服,还是场景服都做类似的处理模式。场景内还需要添加日志线程、流水线程,专门用于处理日志的打印和流水的迁移。

    这个模式的优点:

         1: 每个角色对应一个连接,能够方便的处理消息,减少附加数据结构的设计

         2: 内存拷贝少

         3: 单个进程内所有的玩家都在同一个进程,玩家之前的交互逻辑很容易处理

   这个模式的缺点:

         1:不能充分利用现在多核的设计

2: 另一种处理模式:

                            图 2      另一种设计

通信线程:

 void run()

{

  for(;;){

      select(); //select  epoll wait();

      process_input();

      process_output();

      process_disconnect();

  }

}

逻辑处理逻辑:

void run()

{

    while(TRUE)

   {

          Packet* packet = NULL;

          PacketList.pop(packet);

          if(packet != NULL)

          {

                  process_packet(packet);

           }

   }

}

这里的通信模块更像是一个网关,通信模块和逻辑处理模块之间是经典的生产者和消费者模式,无论是采用巧夺天工的Kfifo设计还是使用自旋锁设计都可以,只是要尽量解除线程切换和等待。

这个模式的优点

             1: 能配置成多线程处理,比如 n:m

     缺点:

             1: 内存拷贝多

             2: 数据迁移之后,需要map去映射玩家和连接

 

感想:

     页游服务器相对来说是端游服务器的弱化版,当然我们也可以设计一个网关服去加大服务器承载的玩家数量,但是这样经过不同进程之间转发的消息又必然会带来很多同步问题,比如帮派和组队逻辑要坐在世界服,而走动打斗逻辑要做在场景服,在玩家在场景之间切换的时候或者一些帮派、好友数据需频繁同步。上面的两种模式不过是工作之余的思考,和参考其他的网友的分享想到的,还有很多的数据没有经过测试,比如在内存拷贝、线程同步与多线程之间如何取舍。还是很想听听其他网友的意见。

时间: 2025-01-19 06:33:38

阅读天龙八部的代码有感----两种逻辑处理模式的比较的相关文章

javascrpit-请问代码在两种环境下执行不一样啊?

问题描述 请问代码在两种环境下执行不一样啊? 原意是在DW中图片可以在页面中切换,而在chrome中就变成直接跳转到图片了,页面就不存在了. 关键代码如下: function showPic(whichpic) { var source = whichpic.getAttribute("href"); var placeholder = document.getElementById("placeholder"); var text = whichpic.getAt

深入php-fpm的两种进程管理模式详解_php实例

php-fpm的两种进程管理模式php-fpm的进程数也是可以根据设置分为动态和静态的.一种是直接开启指定数量的php-fpm进程,不再增加或者减少:另一种则是开始的时候开启一定数量的php-fpm进程,当请求量变大的时候,动态的增加php-fpm进程数到上限,当空闲的时候自动释放空闲的进程数到一个下限.这两种不同的执行方式,可以根据服务器的实际需求来进行调整.这里先说一下涉及到这个的几个参数吧,他们分别是pm.pm.max_children.pm.start_servers.pm.min_sp

ASP、PHP根据时段切换CSS皮肤的代码的两种方法

一个网站能切换不同的CSS风格大家应该都了解,像众所周知的腾讯在今年改版时也增加了切换皮肤的功能.根据时间自动调整站点风格是不错的想法,这种根据时间自动调整站点风格也不是什么新鲜事,记得好久以前也见过类似的文章或方法,只不过当时没有特别注意.下面说一下它们的实现方法,目前网上有这样两种实现方法: 一.采用服务端的代码 ASP版本: <link rel="stylesheet" type="text/css" href=" <% if hour(

javascript密码强度校验代码(两种方法)_javascript技巧

先看效果图: javascript密码强度校验代码,具体实现思路不多说了,请看下面代码和demo. 第一种方法: /* *密码安全程度 *return :全部为字母或者数字,或者密码长度小于 *return : 字母数字组成,或者字母特殊字符,或者数字和特殊字符 *return : 字母和数字和特殊字符 */ String.prototype.passwordStrength=function(){ if(this.length> && this.length<=) retur

我也来说说Entity Frame Work 4中的数据库优先和代码优先两种方式(1)

在 Entity Frame Work (后面直接简称其为EF) 中,支持两种方式创建,一种是数据库优先,另外一种是代码优先: EF是微软推出的一个ORM框架,而在这之前,Java早就有非常成熟的ORM框架了,比如Hibernate(当然,人家也有.NET版本的,叫NHibernate,多了个N),我这次只谈EF,NHibernate下次有时间再讲:   先讲数据库优先吧,数据库优先指的是先创建数据库,包括表和字段的建立,然后根据数据库生成ORM的代码,它是先创建数据库,再创建相关程序代码: 下

关于两种限流模式

流量预警和限流方案中,比较常用的有两种.第一种滑窗模式,通过统计多个单元时间的访问次数来进行控制,当单位时间的访问次数达到的某个峰值时进行限流.第二种为响应模式,通过控制当前活跃请求数,来进行流量控制.下面来简单分析下两种的优缺点. 1.滑窗模式 模式分析: 在每次有访问进来时,我们判断前N个单位时间里总访问量是否超过了设置的阈值,若超过则不允许执行. 这种模式的实现的方式更加契合流控的本质意义.理解较为简单.但由于访问量的预先不可预见性,会发生单位时间的前半段有大量的请求涌入,而后半段则拒绝所

两种虚拟经营模式未来:恒源祥VS美特斯邦威

2008年8月28日,美特斯邦威服饰有限公司正式挂牌上市,董事长周成建表示,所募资金的85%将用于渠道建设.不久后的2008年11月30日,在北京奥运会赞助商权利即将被收回之际,恒源祥宣布成为中国奥委会2009-2012年首家合作伙伴,继续和奥运五环结缘.美特斯邦威和恒源祥这两家以虚拟经营模式著称的企业,正走向两条不同的发展道路,而它们的不同选择或许将代表虚拟经营模式的两种未来. 打江山易,坐江山难 恒源祥和美特斯邦威(以下简称"美邦")的起家模式大同小异.它们都是依靠品牌整合其他社会

酷6两种独特商业模式

"我自认为是个非常幸运的人,生命中有机会经历多种人生和职业角色:一个来自于偏远的东北农村而幸福地生活在京城的人:一个学数学(南开)而先后从事人事工作(MOTO)和总编辑(SOHU)工作的人:一个就业于最现代的互联网行业却痴迷于国学和历史的人.我的志向是把中国传统国学和现代西方企业管理有所结合,中学为体,西学为用,框架为相,琢磨出一套中国式管理之路" --李善友 李善友,酷6网董事长兼CEO,曾担任搜狐高级副总裁兼总编辑,再之前从事多年人力资源管理工作.2006年4月离开搜狐,并创立酷6

近来最火的两种互联网创新模式

问渠哪得清如许,唯有源头活水来.互联网行业之所以如此波澜壮阔,惹无数英雄竞折腰,其最重要的原因之一就是源头活水不断,创新不断. 由于长期关注互联网,自然免不了经常被人问到诸如"最近什么模式最火啊"."你最看好什么模式"."推荐推荐创业项目"之类的问题. 最近一段时间,我的回答是:近来最火的互联网模式有两个,一个是以Foursquare为代表的基于地理位置信息的Checkin模式,一个是以Groupon为代表的http://www.aliyun.c