我真的是很服气了,现在这棋牌游戏服务器架构怎么了

----------
WOW三种公会:是谁决定了服务器的人气
作者:诸神的黄昏_Isvara
公会地址: []
公会会长: []
主玩游戏:
昨日在线人数:35人
昨日PV:1355
  现在你是一个鬼服或者村服的会长,在建设公会的时候,就要考虑到整个服务器的人气。有的公会对于服务器能起到聚拢人气、稳定生态的作用,如果你不弄这样的公会,很快就会被历史的洪流冲垮,没有打翻身仗的余地,反而让你的人重复地体验到负面的情绪。  理论  一个正常的服务器(以下指的服务器专指服务器的己方阵营),有三种公会,他们构成了一种由上而下、非循环性质的生态。他们是:  1.追求进度、规则严明、技术高超的专业PVE公会,也就是一般说的PFU公会。(占总人数的10%以下)  2.活动为主,兼顾娱乐,不争排名,通常有亲友作为核心的中等公会。(占总人数的40%左右)  3.随便玩玩,有人就组活动,人不够就随便刷刷,亲友至上,不收外人的小型公会。(连同野人一起,占总人数的50%左右)  [直接上结论。]如果你想让服务器正常起来,必须,必须以第一种公会为目标,起步时以第二种开始,千万不要做第三种公会。  第一种公会是服务器的生产者。就好像自然界的植物一样,他们只要阳光和空气就可以为全服制造养料:进度、经验、高级装备和图纸、指挥、遵守团队纪律的人,他们还能制造阵营和服务器的自豪感――本阵营乐于谈论的野战记录,一般都要归功于一两个这样的公会。他们永远能够自下而上、自外而内地聚集服务器的人气。  对于第二种公会(我们暂且叫他们生活者),没有上面所述生产出的养料,是很难开起团队的。不管有多少人多少G都没用。不过一旦有了生产者,生活者公会就可以如法炮制,创造更多的团队、更多的装备,更多的坑位,让物资、G和人员都流动起来。对服务器也是有利的。  第三种公会,我们叫他们消费者。他们只是依附和蚕食着前两种公会创造的环境,没有什么生产。他们如果打活动,唯一的目的就是让几个熟识的朋友获益,如果有人AFK,他们就集体解散,非常不稳定。在物资方面,他们消费最多,他们手中有大把的G用来买装备和坐骑什么的,但却不用自己的装备去帮助更多人。也很少真的去采集。一旦服务器交易情况衰落,他们就考虑转服,找下一个可以寄生的地方。在团队方面,他们消费着从前两种公会退役下来的指挥,如果这个人AFK,这种公会没有自身的力量再去维持团队。这种公会自己都很飘忽,更别说从别的服务器拉人了。  为什么鬼服会从一个正常服成为鬼服?常常是因为,生产者放弃了自己生产的位置,转去别服谋求更好的资源(人数、物资、pvp环境),或者经营不善倒闭了,造成生活者和消费者的资源缺乏,公会倒闭是个连锁反应,并不是说这个公会倒了那个公会就会更好。公会越差,人越少,物资越少,形成一个恶性循环。我相信,很多生产者公会都是抱着一种使命感屹立在自己的服务器。  作为鬼服,营造PFU团队暂时不是我们的当务之急,但我们要特别警惕消费者公会的特色:它们总是以“ 温馨 ”为名的。他们互相之间没有什么要求和期待,能混就混混,不能混,也就随便离开。经常看到有会长抱怨说,我勉强维持着这个小公会,对大家没有什么索取和要求,只是为了几个朋友能够永远在一起打,为什么大家还是离开了。我的答案是,因为你们习惯于消费。他们消费着你,你消费着回忆,你们不生产创造什么东西。消费的话,在哪都一样。  我们可以选择混混的生活,也可以选择有意义的生活,我们可以在下个版本再打这个版本的BOSS,也可以在这个版本就协力挑战,人生苦短,wow还能有几个资料片都搞不清楚。作为会长,你要做的就是加速这个体验过程,让大家在有限的游戏时间内不要虚度。温馨只是一个最基本的要求,不是你放低标准的借口。难道 PFU公会就不温馨?你的主力离开网吧回家陪老婆不温馨?只有把公会做得真正“好”了――有好的进度、好的手法,好的纪律和团结精神、自信心,再加上过得去的人数,你的温馨才是有含金量的。  我的这个大公会带起全服务器繁荣的理论,有人不是很同意。有某服第一大会的官员和我说,其实他们服务器的衰落,他们公会要负起主要责任,因为他们在本服各种挖人,把能够带团的人才都招到自己这,让很多中小公会解散了。 他觉得中小型公会才是服务器人气的保障。我把这个说法拿去问该服第二大会的官员,他说,没错啊就是这样啊。我说,那你们也在挖人,那不是和他们一样了吗。答曰,如果我们不挖人,那这服就只有一个大公会了。现在至少我维持了本服第二个公会。我很有感触,是啊。我们都是在逆水行舟。光靠1、2个大公会也不行啊。要是所有公会都以大公会的标准去努力运营,坚持自强而不是依附于人,那这服务器肯定就兴旺。wow的衰落不也因为,游戏越来越快餐,玩家越来越依赖速刷、交易而不是共同体验了吗。  无论从哪个角度来看,我们要做生产型公会,这个目标是定了。  实践  纠正心态  再次强调,做生产者,我们必须以生产本身为游戏目的……不能以消费为生产的目的。这一点要在我们会长带团和制定规则的时候就时刻体现。  把这两点分清并不容易。比如,回忆对每个公会都是重要的财产。作为一个有历史的老服老公会,生产记忆和消费回忆的区别是什么?  老人谈论骄傲的往事,这属于消费回忆,顺带消费了新人的新鲜感和归属感。对于现在和以后没有一点好处。如果真的想生产记忆,请不要再侃侃而谈你的公会历史了,你需要弱化老人的权威,建立靠谱的纲领,新的计划,用合时宜的口号招人,多谈未来,把未来变成真的,而不是把以前的事说的和真的一样。  再比如说,生产装备和消费装备的区别在哪里?打个比方,一个新人进了本,学了打法,拿了最好的装备,却再也没有来;在正常的情况,大家都会很愤怒对不对?愤怒得再也不会轻易接受新人了对不对?  换个思维方式吧,现在我们是生产者。如果你的团队能一致认为,我们为一个非核心玩家创造了一次很好的经历,而且送了他一件我们迟早都会有的礼物,那么恭喜你,你的团队是真正有爱的人。相信我,在鬼服,你会经历非常非常多离队的人,才能找到一个可靠的主力,如果你们在乎这个过程是否被不正当地消费,那么,你们的日子会过得非常不快乐。  严格纪律  表面问题:如果不放宽进组要求,我们就打不起活动。  实际问题:质量低的活动让认真活动的人感到失望,造成长期高质量人员流失。  从重新开打活动到现在,我们公会&诸神的黄昏&非常抵制以下现象,这是本服其他公会,包括其他有活动的公会经常容忍的:  1.迟到不请假不解释  2.装备不FM不插宝石,不带合剂,因为“没处买”或者“太浪费”  3.只报职业就要求进组  4.随意要求换号  大服的各位可能见笑了,我们这边这样的情况真是司空见惯了。我们服的人长期习惯这样了。以至于有些人觉得我们公会太较真,太矫情。哎,真要温馨的话,这样的温馨,只能害了大家,不要也罢!  我们组活动的时候,经常会叫几个会外的人一起,当活动进入正轨,我们就要求会外的朋友,你哪个号参加活动,哪个号就要加入公会。这样他可以看到公会界面、公会频道所交流的开组信息,多和公会的人熟悉。而且如果他违反了纪律,整个公会都会知道。 就是这么简单的一件事,很多人都不愿意接受这个束缚,那么他一定不是我们想要的那种生产者。  有的人说“我很无聊,我随时在,开打随时叫我,我上哪个号都行,加公会就免了”,这话我很不乐意听,如果你只是来打打,打完就走,那到底是我们请你活动呢,还是请你消费我们的活动呢。出勤本身不是生产,而是消费。一个人在打本之外为这个团队做了什么,那才是生产。要是缺了这种人就打不起来,那我们这个团队宁可先不要打了。  限制福利  我们公会不开公会修理。确切地说,小号开50G,满级的不开。  我的逻辑是这样的:为了公会修理加入的,说不定就是吃里趴外小能手。明知没有公会修理,还加入公会的人,公会必然有他所追求的东西。  修理费对于个人绝大多数时候是个心理安慰,不至于负担不起。但是对于公会是个负担。在大服,公会修理是公会间比拼的筹码,你开100G,我开200G,多乖的娃娃也养成了伸手党。公会花钱如流水,很多会长自己掏钱卖卡,就是为了给公会充钱开公修。何必呢?这样的团队真的能成有凝聚力的团队吗??表面问题:这个公会不开公会修理,真抠门。  ?实际问题:这个公会没有以任何方式让我感觉到集体的温暖。  我们希望大家的游戏更顺利,但不是通过要钱给钱这种方式。相对的,我们免费提供非常多种的物资。首先,对于开荒团成员,开荒的物资公会全包,有些是官员自己搓的,有些是用公会资金采购的。其次,对于一般会员,公会银行第一个标签是我们许多会员亲手制作的16格包和各种雕文、宝石、FM卷轴。所有人都可以随意取用。公会资金用来去联盟采购一些稀缺物资比如FM用的水晶、腰带扣,平价卖给会员。需要材料练习专业技能的,也可以在公会银行找到大量存货(我小号做 FM棒的时候真的在公会银行找到了[金珍珠]……),等有了富余材料,大家也会存回公会银行。免费得到东西的感觉比拿到钱要好得多了,礼轻情意重,相信大家对这个公会福利感到非常满意。  同理,在外服招人的时候,我会强调我们是“自力自强”,不报销机票,不保证位置。这样,能接受我们这种特殊情况,渴求集体归属、有心有力一同开荒的人,才会加入我们。我个人对公会里空降党的评价:非常强力。非常热情。超越大部分本地玩家。  现在,世界里经常还会看到有新回来的玩家在抱怨各种事情,但是公会频道完全是另一种气氛,出现什么问题都有很乐观的一群人站出来解答。其实服务器有2000人又怎么样呢,拍卖行全是便宜货又怎么样,公会拿到FD又怎么样,这种自信自尊的气氛才是我最想要的。
现有人对此发表评论
快来参与17173公会流量排名,让您的公会在17173获得更好的宣传机会,来吧!
公会名称:[][]
主力进驻:
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
公会名称:[][]
主力进驻:
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
完美世界(02)
<font color=#-24] <font color=#-09] <font color=#-17] <font color=#-11] <font color=#-25] <font color=#-06] <font color=#-02] <font color=#-18] <font color=#-16] <font color=#-14]
公会大杂烩
论坛热点?BBS
公会专题?管理大观网络游戏服务器陷入死循环的处理方法
网络游戏服务器陷入死循环的处理方法
【专利摘要】网络游戏服务器陷入死循环的处理方法,首先检测死循环,当判定主线程陷入死循环后,监护线程就将主线程挂起,使它暂时停止运行。在主线程的Lua语言程序陷入死循环后,通过监护线程的处理,主动触发Lua的运行时错误,让它中止运行,然后跳回到C/C++里,这样就从死循环中解脱出来,然后通过一些后续处理,来避免再运行相同的代码,从而避免再次陷入死循环。本发明提供一种稳定有效的网络游戏服务器陷入死循环后的处理方法。
【专利说明】网络游戏服务器陷入死循环的处理方法
【【技术领域】】
[0001]本发明属于计算机软件【技术领域】,具体是指一种使用脚本的网络游戏服务器陷入死循环的处理方法。
【【背景技术】】
[0002]在软件架构里,很基本的一个模式就是Client / Server模式,Client端用于显示数据和响应操作,而Server负责为所有的Client端服务器:下发数据和响应上发的消息。网络游戏的实现也是这样一种典型的架构,Client端就是游戏客户端,玩家在客户端显示的虚拟世界里进行游戏,而Server端就是游戏服务器,负责下发玩家的信息和同步其它的玩家。
[0003]如果游戏服务器代码有问题,程序运行过程中出现死循环,那它就再也不能处理客户端的连接和消息包,所有的客户端就都不能进行游戏了。这对几千人、几万人在线的游戏来讲是致命的。目前游戏行业的服务器,都是通过提高代码质量、大量进行测试来防止出现死循环,而一旦出现死循环,就只能重启服务器程序了。而维护服务器的人不可能一天24小时就呆在服务器旁边,所以经常发生服务器出问题后,过了好久才将服务器重启的情况。这给游戏的运营,带来了很不好的影响。
[0004]有鉴于此,本发明人针对现有技术的缺陷深入研究,遂有本案产生。
【【发明内容】】
[0005]本发明所要解决的技术问题在于提供一种稳定有效的网络游戏服务器陷入死循环的处理方法。
[0006]本发明是这样实现的:
[0007]网络游戏服务器陷入死循环的处理方法,包括如下步骤:
[0008]第一步骤:死循环的检测:
[0009]在主线程处理消息前,将这个消息的唯一 id、类型和当前时刻记录下来,保存在一个可多线程访问的结构类型的数据里,然后调入到Lua里对这个消息进行处理,处理完后回到C++里时,再将这些信息清空;监护线程以固定的频率来检测这些信息的处理情况,不同的消息通过消息的唯一 id来标识,如果每次检测时,发现都是在同一个消息的处理状态中,并且处理时间已经超过了最大值,那么就判断陷入了死循环;
[0010]第二步骤:死循环的恢复:
[0011]当判定主线程陷入死循环后,监护线程就将主线程挂起,使它暂时停止运行,然后取得Lua实例,就是lua_State对象,然后通过Lua库的接口,取得当前的运行堆栈,记录到日志中,方便查出到底是哪里的代码引起了死循环;然后取得Lua实例中的_6全局变量,将_G这个table中的所有变量和函数,移到另外一个新建的table,清空_G变量里的数据;然后监护线程将主线程设置为进入“Lua死循环错误状态”,然后再恢复主线程的运行,当主线程里的Lua代码访问到_G里的变量或函数,会触发Lua错误,就会跳回到C++里,主线程就成功地从死循环中跳出来了 ;跳回到C++里后,检测到当前是“Lua死循环错误状态”,就将Lua中的_G_BACKUP存储的变量和函数取出,设置回_G全局变量中,就恢复了 Lua的正常运行环境。
[0012]进一步地,所述监护线程将Lua实例中的_6变量清空的同时,会记录下当前处理的消息类型,然后当主线程恢复到正常运行状态时,如果有客户端又上发了这个类型的消息,服务器将会丢弃这个消息而不再处理。
[0013]本发明的优点在于:这是一种比较通用的主动使脚本语言触发运行错误的方法,只要一个脚本语言有一个类似Lua里的_G全局表的变量,就可以使用这种方法。使用这个方法后,服务器再也没有发生过陷入死循环后,所有玩家都不能进行游戏的事情了,服务器更加稳定,不用担心服务器忽然在什么时候又出问题了。
【【具体实施方式】】
[0014]程序一旦陷入死循环,基本上无法恢复,除非重启进程,特别是像C/C++这样的中低级语言开发的程序。游戏服务器由于逻辑比较复杂,所以一般会接入脚本进行开发,本发明项目里使用的就是Lua脚本。除了框架代码,所有的游戏逻辑功能,都使用Lua语言开发。Lua这样的脚本语言有一个特征,就是运行时如果发生错误,会跳到从C/C++调到Lua的初始地方,而不是像C/C++那样,遇到运行错误程序就直接崩溃退出了。本发明技术方案的核心思想,就是在Lua语言程序陷入死循环后,主动触发它的运行时错误,让它中止运行,然后跳回到C/C++里,这样就从死循环中解脱出来,然后通过一些后续处理,来避免再运行相同的代码,从而避免再次陷入死循环。
[0015]本发明共涉及到两个线程,一个线程就是游戏服务器的主线程,负责处理所有客户端的消息,另一个线程起监视和协助的作用。
[0016]具体实现方式如下:
[0017]一、对死循环的检测:
[0018]在主线程处理消息前,将这个消息的唯一 id、类型和当前时刻记录下来,保存在一个可多线程访问的结构类型的数据里,然后调入到Lua里对这个消息进行处理,处理完后回到C++里时,再将这些信息清空,表示已经完成了对这个消息的处理。如果在Lua语言里,对这个消息的处理过程中,陷入了死循环,那将不能正常地回到C++里,这时这些信息就会一直保持调入到Lua前的状态。另外一个线程,就是监护线程,以固定的频率(比如I分钟一次),来检测这些信息的处理情况,不同的消息通过消息的唯一 id来标识,如果每次检测时,发现都是在同一个消息 的处理状态中,并且处理时间已经超过了最大值,那么就判断陷入了死循环,然后就启动对死循环的恢复操作。对应的部分伪代码如下:
【权利要求】
1.网络游戏服务器陷入死循环的处理方法,其特征在于:包括如下步骤:
第一步骤:死循环的检测:
在主线程处理消息前,将这个消息的唯一 id、类型和当前时刻记录下来,保存在一个可多线程访问的结构类型的数据里,然后调入到Lua里对这个消息进行处理,处理完后回到C++里时,再将这些信息清空;监护线程以固定的频率来检测这些信息的处理情况,不同的消息通过消息的唯一 id来标识,如果每次检测时,发现都是在同一个消息的处理状态中,并且处理时间已经超过了最大值,那么就判断陷入了死循环;
第二步骤:死循环的恢复:
当判定主线程陷入死循环后,监护线程就将主线程挂起,使它暂时停止运行,然后取得Lua实例,就是lua_State对象,然后通过Lua库的接口,取得当前的运行堆栈,记录到日志中,方便查出到底是哪里的代码引起了死循环;然后取得Lua实例中的_6全局变量,将_G这个table中的所有变量和函数,移到另外一个新建的table,清空_G变量里的数据;然后监护线程将主线程设置为进入“Lua死循环错误状态”,然后再恢复主线程的运行,当主线程里的Lua代码访问到_G里的变量或函数,会触发Lua错误,就会跳回到C++里,主线程就成功地从死循环中跳出来了 ;跳回到C++里后,检测到当前是“Lua死循环错误状态”,就将Lua中的_G_BACKUP存储的变量和函数取出,设置回_G全局变量中,就恢复了 Lua的正常运行环境。
2.如权利要求1所述的网络游戏服务器陷入死循环的处理方法,其特征在于:
所述监护线程将Lua实例中的_6变量清空的同时,会记录下当前处理的消息类型,然后当主线程恢复到正常运行状态时,如果有客户端又上发了这个类型的消息,服务器将会丢弃这个消息而不再处理。
【文档编号】G06F11/07GKSQ
【公开日】日
申请日期:日
优先权日:日
【发明者】刘德建, 陈宏展, 郭锐, 陈南
申请人:福建天晴数码有限公司

我要回帖

更多关于 网页游戏服务器 的文章

 

随机推荐