做遊戲與web的(de)區别 - 服務器篇【1】 - 新聞資訊 - 雲南小程序開發|雲南軟件開發|雲南網站建設-昆明融晨信息技術有限公司

159-8711-8523

雲南網建設/小程序開發/軟件開發

知識

不(bù)管是(shì)網站,軟件還是(shì)小程序,都要(yào / yāo)直接或間接能爲(wéi / wèi)您産生價值,我們在(zài)追求其視覺表現的(de)同時(shí),更側重于(yú)功能的(de)便捷,營銷的(de)便利,運營的(de)高效,讓網站成爲(wéi / wèi)營銷工具,讓軟件能切實提升企業内部管理水平和(hé / huò)效率。優秀的(de)程序爲(wéi / wèi)後期升級提供便捷的(de)支持!

您當前位置>首頁 » 新聞資訊 » 網站建設 >

做遊戲與web的(de)區别 - 服務器篇【1】

發表時(shí)間:2018-7-15

發布人(rén):融晨科技

浏覽次數:31

在(zài)一間遊戲公司的(de)兩個(gè)部門待過, 前一個(gè)部門以(yǐ)做web開發爲(wéi / wèi)主,後一個(gè)部門做遊戲開發,我在(zài)兩邊都是(shì)做後端的(de)。

在(zài)遊戲部門待的(de)時(shí)間不(bù)長, 不(bù)敢說(shuō)已經深入了(le/liǎo)解遊戲開發技術細節,我僅把我已經接觸到(dào)的(de)内容與之(zhī)前擅長的(de)web技術做對比,一來(lái)作爲(wéi / wèi)工作日志記錄, 二來(lái)希望能給想從web轉遊戲的(de)同學提供一個(gè)預先學習的(de)方向,少走一些彎路。

這(zhè)一系列内容我會連載發布,而(ér)不(bù)是(shì)一次性講清楚所有内容, 畢竟當前還不(bù)敢狂妄的(de)表示已經了(le/liǎo)解遊戲開發的(de)種種細節。

通用性

即使不(bù)同類型的(de)軟件開發也(yě)是(shì)具有一定相似性的(de),這(zhè)種相似性随軟件類型的(de)不(bù)同而(ér)不(bù)同。 如web前端開發與web後端開發差異就(jiù)挺大(dà), 前端程序運行在(zài)浏覽器中,後端程序運行在(zài)服務器上(shàng);前端程序操縱的(de)目标是(shì)網頁元素,後端程序操縱的(de)目标是(shì)存儲在(zài)服務器上(shàng)的(de)數據。前端和(hé / huò)後端相似的(de)地(dì / de)方估計也(yě)就(jiù)編程語言使用的(de)一些基礎概念了(le/liǎo),所以(yǐ)前後端程序員崗位轉變存在(zài)一定難度,比如讓一個(gè)沒有任何後端經驗的(de)前端程序員立馬上(shàng)手寫後端程序,幾乎不(bù)可能。

然而(ér)web服務器和(hé / huò)遊戲服務器的(de)差異就(jiù)沒這(zhè)麽大(dà)了(le/liǎo),它們用的(de)是(shì)相同的(de)編程語言, 比如說(shuō)java;它們用的(de)是(shì)相同的(de)數據庫軟件,比如mysql和(hé / huò)redis;它們都運行在(zài)服務器端,比如linux server和(hé / huò)windows server,且對穩定性要(yào / yāo)求及其嚴格。擁有這(zhè)幾處相同點兩種程序在(zài)宏觀上(shàng)是(shì)完全相似的(de),對應程序員工作的(de)轉換也(yě)不(bù)存在(zài)硬性的(de)技術障礙, 如果程序員技術基礎紮實,完全可以(yǐ)平滑過渡。

差異性

因爲(wéi / wèi)業務的(de)不(bù)同,web服務器和(hé / huò)遊戲服務器勢必存在(zài)不(bù)同之(zhī)處,然而(ér)這(zhè)種不(bù)同并非技術上(shàng)的(de)不(bù)同,而(ér)是(shì)套路上(shàng)的(de)不(bù)同。

服務器類型的(de)不(bù)同

web程序使用http服務,浏覽器和(hé / huò)服務器之(zhī)間是(shì)http協議通信。遊戲服務器通常是(shì)一個(gè)socket服務器,與遊戲客戶端之(zhī)間保持長連接,如果是(shì)網頁H5遊戲,那麽使用的(de)也(yě)是(shì)全雙工的(de)websocket協議。通常,使用http協議的(de)web服務器不(bù)用程序員費事去管理網絡連接,程序員隻要(yào / yāo)專注業務邏輯即可。而(ér)使用socket或者web socket等協議進行長連接通信卻需要(yào / yāo)程序員手動編程管理,比如說(shuō)斷線重連遊戲狀态恢複機制,就(jiù)需要(yào / yāo)手動處理網絡連接。這(zhè)表示socket編程難度大(dà)于(yú)http編程,從而(ér)導緻遊戲服務器編程大(dà)于(yú)web服務器編程。可這(zhè)并不(bù)能表示遊戲服務器編程不(bù)同于(yú)web編程, 如果一個(gè)web程序員不(bù)了(le/liǎo)解socket編程原理,那也(yě)不(bù)能算一個(gè)優秀的(de)web程序員,畢竟http是(shì)以(yǐ)socket爲(wéi / wèi)基礎的(de)。

傳輸數據格式的(de)不(bù)同

在(zài)web前後端傳輸數據除了(le/liǎo)使用http标準的(de)鍵值對格式以(yǐ)外使用最多的(de)是(shì)json,json被使用的(de)一個(gè)最重要(yào / yāo)的(de)原因是(shì)與JS無縫兼容,高效方便。然而(ér),這(zhè)種優勢在(zài)遊戲客戶端中不(bù)存在(zài),人(rén)家遊戲客戶端又不(bù)使用JavaScript編程,所以(yǐ)遊戲客戶端和(hé / huò)服務器之(zhī)間有更合适的(de)數據傳輸時(shí)格式存在(zài)。

我接觸到(dào)的(de)是(shì)谷人(rén)希家的(de)protocol buffer協議, 它相對于(yú)json的(de)優點是(shì)

  • 體積小。經我測試,同樣的(de)數據内容,使用protocol buffer格式存儲大(dà)小隻有使用json存儲的(de)三分之(zhī)一甚至更低,即使在(zài)某些特殊情況下也(yě)不(bù)會超過json的(de)一半。

  • 嚴格驗證數據格式,有xml xsd的(de)功效。而(ér)json數據格式驗證相對寬松,隻要(yào / yāo)符合json語法就(jiù)行,因此容易出(chū)錯。反之(zhī),protocol buffer則更加穩定。

至于(yú)缺點最嚴重的(de)是(shì)使用麻煩, 需要(yào / yāo)借助谷人(rén)希的(de)第三方工具才行。

protocol buffer的(de)使用細節,這(zhè)裏不(bù)作講解。

分布式處理業務

我接觸到(dào)的(de)遊戲服務器是(shì)微服務的(de)一種形态, 整個(gè)遊戲服務器的(de)邏輯被分割成很多服務模塊,分别運行在(zài)不(bù)同的(de)服務器上(shàng)。然而(ér),我無法理解的(de)是(shì)每個(gè)模塊之(zhī)間的(de)通信居然使用socket,而(ér)不(bù)是(shì)更流行的(de)http。遊戲客戶端與服務器之(zhī)間使用socket連接可以(yǐ)理解, 然而(ér),服務器各模塊之(zhī)間也(yě)使用socket卻有些使我莫名其妙,雖然這(zhè)會使服務器之(zhī)間通信性能有所提升,卻會帶來(lái)編寫代碼任務過于(yú)複雜,穩定性下降等問題,爲(wéi / wèi)了(le/liǎo)些許性能提升而(ér)喪失項目的(de)維護性,有點得不(bù)償失。 不(bù)過也(yě)有可能我還沒有理解其中奧秘,判斷過于(yú)片面。

極端的(de)性能敏感

遊戲中實時(shí)對戰模塊必須使用c/c++實現,原因是(shì)JVM執行垃圾收集時(shí)會造成虛拟機停頓,也(yě)就(jiù)是(shì)stop the world。在(zài)虛拟機技術發展日新月異的(de)今天, gc停頓依舊會對遊戲體驗造成影響,因而(ér)必須使用老掉牙的(de)c++, 這(zhè)使我感到(dào)震驚。

另外, 遊戲中大(dà)多數數據被放在(zài)redis中而(ér)非mysql也(yě)使我意外,數據持久化存儲顯然不(bù)是(shì)redis的(de)優勢,拿性能換穩定和(hé / huò)安全,這(zhè)種做法略顯激進。

以(yǐ)上(shàng)内容是(shì)我當前對于(yú)web開發與遊戲服務器開發不(bù)同之(zhī)處的(de)見解,如有謬誤請指出(chū)。 此外,在(zài)之(zhī)後的(de)學習和(hé / huò)實踐中的(de)心得體會,會在(zài)之(zhī)後的(de)文章中繼續發布。

相關案例查看更多