服务器,按我的话通俗来说,就是指在其他一个专门的地方,在一个专门的网络环境下的客户机来提供某种服务的专用计算机,如果你直接在网页上搜索服务器的话,你就可以看到,页面中有许多出租服务器的信息。看到这个我就想起来曾经我因为这个吃的亏,当时我从某些不良渠道租用了一个服务器来运行一个我的世界这款游戏的服务器(当时也没宣传到位,最后黄了,白掏钱),当时租用一个月要我150块钱(服务器还经常崩溃),我现在看到网页这个价格,看着都难受。 我觉得我的那次经历能很好的说明这些服务器。所以我就按照我的说法说个大概。 经过宣传首先web服务器是需要长期运行的的程序,也需要响应不定点不定时处理来自用户的请求。就像我租的那个服务器的地方,经常时不时的停止运行,导致我经常要和后台说明,然后对我的玩家说服务器又崩了,正在解决 游戏服务器是有状态的,web服务器无状态,因为web服务器的数据大多会直接流入到数据库,而游戏服务器的数据首先会到内存中,然后定期的写入到数据库中,这就不得不提我的服务器回档问题了,所谓回档,就是你在我服务器打的装备,在没写入的数据库的时候,我的服务器就崩了,然后你打的装备就没了,我的游戏服务器就没有继承数据,回到了几个小时或一天前的状态,不知道你们知道我的世界神奇宝贝不,当时有人蹲了一天抓到了一只裂空座,很巧,我的服务器回档了,他蹲到的没了,然后就来吐槽我,让我赔他裂空座,因为我的是小服务器嘛,玩家就是上帝,我就赔他了,后来就有了一个不好的结果,很多人靠着服务器回档,故意说丢了这个丢了那个,让我赔,我也分不清真假,导致非常混乱,还要我一个个挨着赔礼道歉,当然,web服务器不会出现这样的问题,web所有的数据状态都会落地么钱可以针对操作加上事务,不用担心因为操作失败而引入脏数据,正因为有了状态的约束,游戏服务器会更加慎重的使用内存和cpu。以求在资源有限的情况下更大化的提高承载量,来降低延迟。(我那个lj服务器承载50人就不行了,再多人就延迟高的离谱,我见过一个大佬创建的天域服务器都开出分服务器了,承载了上千人,(我当时就是搞的他的bug)o.0)所以. 对于一个游戏服务器,所能使用的内存和cpu资源是非常有限的,不像web服务器可以不用花很大的代价做到横向扩展,也就是为什么游戏服务器会十分注重代码的性能和稳定性。游戏服务器出现了bug,大则导致服务器不可用,小则让某些人刷得大量的道具,我的服务器有一个玩家建立的帮会,叫“坟前蹦迪”,当时我就非常纳闷,为什么这个帮会的玩家资源多的离谱,脱离的我的设定显示,还下线交易来卖钱,因为他挡了我的财路,所以我非常生气,就去调查他,不调查不知道,一调查吓一跳,他们的经验糖果(很珍贵的道具)都是一组一组的(一组有64个),后来我建个小号进入我的服务器,靠关系混进坟前蹦迪,才知道,他们卡我服务器的bug来疯狂刷道具。然后我就封了他们的号(之后我利用这个bug去攻击了那个天域的服务器,(太眼红了)不光彩)。 对于服务器重启来说,服务器重启会导致玩家进不去游戏,但我的服务器需要有时间把数据库下载到内存中,所以租用服务器那边会在凌晨两点统一重启服务器来维持服务器的稳定。但如果服务器重启之后的落地出现了问题,可能导致数据不一致。这个情况我还没遇到过。 修复数据也是游戏服务器很重要的一环,我也有大致的了解,当时是请的大佬来修复这个数据,因为这个要应对游戏服务器的一些情况,如果服务器抛出异常或者panic,其造成的后果会被游戏特殊的环境放大,,举个例子,在我的服务器使用传送这个指令的时候,可能有时候会导致精灵卡没或者卡出相同精灵的情况,大多数再传送就会回到原因,但有的时候可能真的实现精灵双倍化,甚至消失,当时出现这个问题的时候我也是第一时间给了大佬来修复这个数据,因为这个bug,我都快被骂死了。 Web的数据传输格式是JSON.而在游戏服务器中是Protobuf,是由Google开发的数据传输格式,说起google,就要提一下google开发的编程语言go语言,这个go语言,他是被设计成一门应用于搭建web服务器,因为go语言在服务器这块是非常有优势的。Go又称golang.其语法非常接近C语言,但go语言比大多数其他语言有着更高的开发效率,他十分简洁,如果和java比起来就可以很清楚的体会到这种感觉,它有着这些特性例如,自动垃圾回收,更丰富的内置类型,函数多返回值,错误处理,匿名函数和闭包,类型和接口,并发编程,反射,语言交互性,并且它提供了很多可以并行的支持,所以说对游戏服务器非常有优势。 最后我的服务器为什么凉了,lj的服务端,bug,回档,数据遗失,我转不到钱只是一点,主要原因是被一个叫天罚的大佬的看上了,盗走了我的root权限,然后我的服务器就无了。 这只是一个简单的介绍,