游戲服務(wù)器與普通服務(wù)器有什么區(qū)別?

2025-8-15 / 0 評(píng)論 / 32 閱讀

一、游戲服務(wù)器、普通APPweb服務(wù)器

如果是同等用戶規(guī)模,相對(duì)來(lái)說(shuō),游戲服務(wù)器的復(fù)雜程度要大于普通appweb服務(wù)器。當(dāng)然涉及到特殊算法的服務(wù)器另說(shuō),比如搜索引擎、頭條人工智能推薦這些除外,在這里只說(shuō)普通的。

AgAANG8L5lCrBDmvEGFOC5FuzeIrzVql.png

二、游戲服務(wù)器類型

游戲服務(wù)器根據(jù)不同的游戲類型有很大的區(qū)別,如王者榮耀之類的MOBA手游,服務(wù)器主要由2部分構(gòu)成,局內(nèi)戰(zhàn)斗服務(wù)器局外系統(tǒng)服務(wù)器

局內(nèi)戰(zhàn)斗服務(wù)器程序是游戲?qū)S玫模谄渌?/span>app服務(wù)器上幾乎沒(méi)有使用場(chǎng)景,在技術(shù)方面是有鴻溝的,也就是說(shuō)你在開(kāi)發(fā)app服務(wù)器上使用的技術(shù)以及設(shè)計(jì)思路,是無(wú)法轉(zhuǎn)換為局內(nèi)戰(zhàn)斗服務(wù)器設(shè)計(jì)思路的,兩者之間存沒(méi)有相同點(diǎn)。

二、幀同步和狀態(tài)同步

AgAANG8L5lAMWE926E5P0JnV6GXm__Je.png

戰(zhàn)斗服務(wù)器需要做到給各個(gè)玩家數(shù)據(jù)同步,也就是說(shuō),在一局游戲內(nèi),所有玩家的實(shí)時(shí)狀態(tài)都要相互可見(jiàn)。這其中又設(shè)計(jì)到2種技術(shù),幀同步狀態(tài)同步

幀同步服務(wù)器不包含游戲邏輯,就是簡(jiǎn)單將客戶端發(fā)送過(guò)來(lái)的命令轉(zhuǎn)發(fā)給其他客戶端,比如玩家A執(zhí)行一個(gè)攻擊操作,那么玩家A客戶端會(huì)給服務(wù)器發(fā)送一個(gè)攻擊命令,服務(wù)器將這個(gè)命令同步給局內(nèi)的其他玩家,至于攻擊一下少多少點(diǎn)血,會(huì)不會(huì)把人打死,服務(wù)器不管,全部由客戶端完成計(jì)算判斷,客戶端計(jì)算完畢后將結(jié)果發(fā)送給服務(wù)器,服務(wù)器再將結(jié)果同步給其他玩家,然后客戶端播放表現(xiàn)效果。簡(jiǎn)單的說(shuō)幀同步服務(wù)器就是給各個(gè)游戲客戶端同步數(shù)據(jù),它會(huì)不間斷的發(fā),即使局內(nèi)的玩家什么都不干,傻傻的站在那里,服務(wù)器也會(huì)發(fā),他的作用就是同步玩家們的狀態(tài),所以說(shuō)幀同步服務(wù)器費(fèi)流量。

狀態(tài)同步服務(wù)器和幀同步服務(wù)器的區(qū)別在于,除了同步玩家狀態(tài)的機(jī)制相同外,狀態(tài)同步服務(wù)器包含游戲的運(yùn)行邏輯,比如玩家之間互相攻擊、技能傷害大小計(jì)算,都在服務(wù)器上執(zhí)行,然后再將執(zhí)行結(jié)果同步給客戶端,客戶端只要根據(jù)結(jié)果播放對(duì)應(yīng)的動(dòng)畫(huà)就可以了。

簡(jiǎn)而言之,幀同步服務(wù)器和狀態(tài)同步服務(wù)器的區(qū)別就是游戲局內(nèi)游戲邏輯放在哪兒運(yùn)行的問(wèn)題。因?yàn)橐\(yùn)行游戲邏輯,狀態(tài)同步非常消耗服務(wù)器資源,如果代碼寫(xiě)的爛一點(diǎn),一臺(tái)48G的機(jī)器上只能跑10局游戲100個(gè)玩家,那么要是同時(shí)有10萬(wàn)玩家在局內(nèi),就需要1000臺(tái)服務(wù)器,這么多服務(wù)器,運(yùn)維管理壓力非常大。因此使用幀同步服務(wù)器能有效的減少服務(wù)器消耗資源,減少服務(wù)器數(shù)量。然而有缺點(diǎn)就有優(yōu)點(diǎn),因?yàn)闃I(yè)務(wù)邏輯在客戶端,幀同步服務(wù)器很難有效的杜絕外掛問(wèn)題,斷線重連也相對(duì)費(fèi)勁,用戶體驗(yàn)差。而狀態(tài)同步則不存在這種問(wèn)題,能有效的杜絕外掛,也能很容易的支持重連進(jìn)入游戲。所以這兩種技術(shù)各有優(yōu)缺點(diǎn),選擇哪一種,需要根據(jù)實(shí)際情況權(quán)衡。

四、TCPUDP協(xié)議

普通的web服務(wù)器或者app服務(wù)器十有八九使用基于tcphttp協(xié)議,而局內(nèi)戰(zhàn)斗服務(wù)器,普遍使用UDPTCP是可靠傳輸協(xié)議,用起來(lái)省事,確認(rèn)機(jī)制、丟包重傳、滑動(dòng)窗口之類機(jī)制開(kāi)銷也大,在極端性能敏感的場(chǎng)景下,裸奔的UDP更加合適,通過(guò)UDP實(shí)現(xiàn)一個(gè)lite版的TCP,是游戲戰(zhàn)斗服務(wù)器常規(guī)的優(yōu)化手段。

不過(guò)話說(shuō)回來(lái),看起來(lái)局內(nèi)戰(zhàn)斗服務(wù)器實(shí)現(xiàn)有很多門道,但是工作量其實(shí)非常少,屬于做好一次到處通用, 即使?fàn)顟B(tài)同步,雖然業(yè)務(wù)邏輯跑在服務(wù)器上,但實(shí)際功能開(kāi)發(fā)還是客戶端程序員實(shí)現(xiàn),服務(wù)器只是提供了一個(gè)運(yùn)行程序的容器,戰(zhàn)斗邏輯的實(shí)現(xiàn)不歸服務(wù)器管。

再說(shuō)說(shuō)局外服務(wù)器,這部分和普通的web服務(wù)器和app服務(wù)器就比較像了,MySqlRedisprotobuf消息隊(duì)列分布式框架等等互聯(lián)網(wǎng)應(yīng)用的基礎(chǔ)架構(gòu)在游戲服務(wù)器上也是常規(guī)配置,不過(guò)有一點(diǎn)明顯的區(qū)別是,游戲服務(wù)器的數(shù)據(jù)存儲(chǔ)都是以玩家為單位的,當(dāng)玩家登錄的時(shí)候,程序會(huì)將所有玩家的數(shù)據(jù),如道具、裝備、任務(wù)等所有相關(guān)數(shù)據(jù)從MySql等數(shù)據(jù)庫(kù)中加載到程序內(nèi)存,之后所有的操作都在內(nèi)存中進(jìn)行,之后等到某個(gè)適當(dāng)?shù)臅r(shí)機(jī)才會(huì)將內(nèi)存中的數(shù)據(jù)同步到MySql中。當(dāng)然,為了保證即使程序掛掉,數(shù)據(jù)也不丟失,還需要設(shè)計(jì)許多復(fù)雜的機(jī)制,這里就不展開(kāi)了。

web服務(wù)器和app服務(wù)器則不是這么設(shè)計(jì)的,因?yàn)橛螒蛉绻坏卿浭遣豢梢酝娴模虼宋覀兛梢园褦?shù)據(jù)結(jié)構(gòu)設(shè)計(jì)成以用戶分組的。而webapp即使用戶不登錄,功能依然需要可以使用,功能和用戶不綁定,所以設(shè)計(jì)的時(shí)候也不會(huì)把數(shù)據(jù)以用戶為單位進(jìn)行組織。不過(guò)除了數(shù)據(jù)組織方式不同外, 其他地方大致都相同,原本是做游戲服務(wù)器的,稍微熟悉下就可以去做web或者app服務(wù)器,反過(guò)來(lái)也一樣,互相之間沒(méi)有門檻。

不過(guò)從技術(shù)的角度出發(fā),局外游戲服務(wù)器的技術(shù)相對(duì)與其他互聯(lián)網(wǎng)行業(yè)是比較落后的,如果你原本是在傳統(tǒng)互聯(lián)網(wǎng)行業(yè),轉(zhuǎn)去做游戲服務(wù)器,可能會(huì)被雷到,因?yàn)樗麄冇玫目蚣芤稽c(diǎn)也不現(xiàn)代化,也許框架的性能還不錯(cuò), 但是開(kāi)發(fā)效率極低。這一點(diǎn)和游戲客戶端不一樣,游戲客戶端是脫離傳統(tǒng)互聯(lián)網(wǎng)技術(shù)的,他們有自己的技術(shù)棧,而且實(shí)時(shí)更新。比如unityunreal引擎出新版本了,他們都會(huì)討論的熱火朝天,然后嘗試升級(jí)使用,這和互聯(lián)網(wǎng)行業(yè)的vuereactspring更新一樣,相關(guān)程序員都會(huì)熱衷與研究。

但是服務(wù)器卻沒(méi)有這樣的熱點(diǎn)可以追,我在一家公司,這家公司雖然已經(jīng)生產(chǎn)了幾十個(gè)游戲,客戶端引擎也不知道換了多少套,但是服務(wù)器程序卻一點(diǎn)沒(méi)變,仍舊使用祖宗流傳下來(lái)的那套c++框架,里面什么都是手動(dòng)實(shí)現(xiàn)的

比如數(shù)據(jù)傳輸協(xié)議,是自己組裝字節(jié)流,發(fā)送給另一端,另一端根據(jù)事先定義好的規(guī)則,一個(gè)int,一個(gè)bool,一個(gè)float的讀取。這對(duì)于理解網(wǎng)絡(luò)的本質(zhì)非常有好處,但是顯然在實(shí)際應(yīng)用中,使用protobuf會(huì)更好。

當(dāng)然我也碰到過(guò)協(xié)議不自己實(shí)現(xiàn)而是使用protobuf的,而且使用的是java開(kāi)發(fā)局外服務(wù)器,而網(wǎng)絡(luò)底層仍舊使用java自帶的NIO,而不是更好的netty

總而言之,傳統(tǒng)的游戲服務(wù)器程序不是太喜歡用框架,而是偏向于自己造輪子。這可能跟這個(gè)行業(yè)大量使用c++有關(guān)系,即使有一部分游戲使用java服務(wù)器 ,但是開(kāi)發(fā)人員大多也是c++轉(zhuǎn)過(guò)來(lái)的,還是以c++一切靠自己的思路在開(kāi)發(fā),所以很難見(jiàn)到流行的互聯(lián)網(wǎng)框架在游戲服務(wù)器上使用。

游戲服務(wù)器不會(huì)只用一種語(yǔ)言開(kāi)發(fā),也可能是兩種。如果是一種,那大概率是c++。如果是兩種,那大概率是c++加另一種語(yǔ)言。

c++的原因很多,如果要找一種語(yǔ)言,兼顧性能、開(kāi)發(fā)效率、流行度,那肯定是c++。戰(zhàn)斗服務(wù)器通常用c++開(kāi)發(fā),一來(lái)是速度夠快;二來(lái)戰(zhàn)斗程序通常需要同時(shí)在客戶端和服務(wù)器上運(yùn)行,要找一種跨平臺(tái)的,還是要c++,比如unity種就可以通過(guò)c#調(diào)用c++

局外服務(wù)器可以不用c++做,用javago甚至php都可以,不過(guò)近年來(lái)用go好像越來(lái)越多了。

最后還有一個(gè)人員方面的區(qū)別,一個(gè)傳統(tǒng)互聯(lián)網(wǎng)項(xiàng)目,后端開(kāi)發(fā)人員會(huì)多于前端開(kāi)發(fā)人員。而一個(gè)游戲項(xiàng)目,客戶端開(kāi)發(fā)人員要比服務(wù)器開(kāi)發(fā)人員多,可能一個(gè)項(xiàng)目服務(wù)器程序員只有3個(gè),而客戶端程序員有10多個(gè)。而且客戶端程序員都很忙,而服務(wù)器程序員,在開(kāi)發(fā)階段,相對(duì)很閑,游戲上線后, 會(huì)忙一些。

主站蜘蛛池模板: 国产精品无码v在线观看| 少妇人妻av无码专区| 99国产精品无码| 亚洲另类无码一区二区三区| 亚洲av日韩av无码av| 无码av大香线蕉伊人久久| 成人无码a级毛片免费| 亚洲Av永久无码精品一区二区| 影音先锋无码a∨男人资源站| 国产成人无码18禁午夜福利p| 内射精品无码中文字幕| 国产日韩AV免费无码一区二区| 无码人妻AV免费一区二区三区 | 无码永久免费AV网站| AV无码精品一区二区三区宅噜噜| 无码国产精品久久一区免费| 在线无码午夜福利高潮视频| 日韩精品无码一本二本三本| 十八禁视频在线观看免费无码无遮挡骂过| 亚洲精品无码久久久久A片苍井空| 中文字幕无码视频专区| 国模无码视频一区二区三区| 精品久久亚洲中文无码| 小13箩利洗澡无码视频网站 | 日韩AV无码一区二区三区不卡| 亚洲成a人片在线观看无码| 一本大道无码日韩精品影视| 亚洲国产精品无码中文lv| 久久久无码精品亚洲日韩京东传媒| 日韩人妻无码一区二区三区久久99| 国产精品爽爽va在线观看无码| 亚洲av永久中文无码精品综合| 亚洲第一极品精品无码久久| 亚洲人成人无码.www石榴| 日韩精品久久无码中文字幕| 亚洲色偷拍另类无码专区| 精品无码综合一区| 狠狠躁天天躁中文字幕无码 | 无码人妻久久久一区二区三区| 超清无码无卡中文字幕| 久久久无码精品亚洲日韩软件|