游戲服務(wù)器:游戲服務(wù)器和web服務(wù)器的區(qū)別
【小編提示】本文部分內(nèi)容摘自網(wǎng)絡(luò),僅供參考!如需了解服務(wù)器租用\托管相關(guān)問題,請咨詢YINGSOO專業(yè)客服,享受1V1貼心服務(wù)!免費熱線400-630-3752
【選購幫助】國外vps網(wǎng)站加速

用go語言寫游戲服務(wù)器也有一個多月了,也能夠明顯的感受到兩者的區(qū)別。這篇文章就是想具體的聊聊其中的區(qū)別。當然,在了解區(qū)別之間,我們先簡單的了解一下go語言本身。
go語言的特點
go語言跟其他的語言例如Java比起來,算得上一門很年輕的語言。go語言是由Robert griesemer、Rob pike和Ken thompson于2007年在google開發(fā)。并于2009年正式發(fā)布。
go語言的設(shè)計理念圍繞著簡潔這兩個字,認為少即是多。如果你熟悉Java,用Java那一套語法命名跟go做對比,可以很明顯的體會到這種感覺。
go的特點可以簡單的概括成以下幾個點。
靜態(tài)類型和編譯型
首先go是靜態(tài)類型,靜態(tài)類型就是編譯時就知道每一個變量的類型,得益于此,在編譯的階段就能夠發(fā)現(xiàn)很多問題。而如果是動態(tài)語言,例如Javascript,有些問題直到運行時才能發(fā)現(xiàn)。
go是編譯型語言,看到編譯型大家腦子里可能會想到另外一個詞解釋型。兩者的區(qū)別從字面上來理解其實已經(jīng)可以看出來,我用一個簡單的例子來類比一下。
編譯型 去餐館吃飯,點了菜之后,飯店會等所有的菜做好了再上
解釋型 去餐館吃飯,點了菜之后,陸陸續(xù)續(xù)的邊吃邊上
跨平臺
顧名思義,你寫的go源碼在所有的系統(tǒng)都能夠運行。
這點其實很好理解,例如Java的口號是”write once, run anywhere”。我們都知道Java是編譯型的語言,但是Java在編譯的時候生成的是字節(jié)碼,這個字節(jié)碼與當前的操作系統(tǒng)無關(guān),與cpU也無關(guān)。
這種字節(jié)碼必須依賴Java虛擬機才能運行,而虛擬機會將操作系統(tǒng)和cpU之間的差異與用戶屏蔽。對于編程的人來說這個過程其實無感知的。而對Java來說,語言本身的跨平臺并不能代表代碼可以跨平臺。
go的跨平臺從某種方面來說,與Java類型,我們需要安裝與當前操作系統(tǒng)相對應(yīng)版本的go。編譯出來的可執(zhí)行文件會根據(jù)操作系統(tǒng)的不同而有所不同。
自動垃圾回收
與JVm一樣,go在運行時的內(nèi)存管理(gc)由go語言本身來管理,不需要程序員的參與,但是我們可以干預(yù)。
原生的并發(fā)編程
何為原生?我們都知道,在Java中如果要實現(xiàn)并發(fā), 需要外部的類庫支持(thread),而go不需要從外部再引入任何依賴。支持使用關(guān)鍵字go即可。而且Java中是通過共享內(nèi)存進行通信的,熟悉go的應(yīng)該都看過一句話“不要通過共享內(nèi)存來通信,而應(yīng)該通過通信來共享內(nèi)存”
完善的構(gòu)建工具
從獲取、編譯、測試、安裝、運行和分析等一系列流程都有自己的內(nèi)置工具。例如獲取可以使用go get命令來下載更新指定的代碼包,并且對它們進行編譯和安裝,可以使用go build 對源碼[日本vps]進行編譯,用go run命令來運行g(shù)o的程序,用go fmt來快速格式化代碼,統(tǒng)一代碼風格。
多范式編程
目前主流的編程范式有命令式編程、函數(shù)式編程和我們最熟悉的面向?qū)ο缶幊?。在編寫go的代碼的時候,我們可以選擇使用面向?qū)ο蟮姆椒?,也可以使用函?shù)式編程的思想,相互結(jié)合,相輔相成。
例如,在go里面也可以用接口來描述行為,也可以使用純函數(shù)來避免出現(xiàn)副作用。因此,多范式編程就是指這個語言支持多種編程范式的。
代碼風格強統(tǒng)一
使用go的內(nèi)置工具go fmt即可快速的將代碼格式化成官方統(tǒng)一的標準,以此來達到代碼風格統(tǒng)一的目的。甚至可以用golangci-lint來檢測你的語法跟內(nèi)置的標準語法是否有沖突,完全可以將這個檢測工具掛在git的鉤子上,以此來達到強制的代碼風格統(tǒng)一的目的。
活躍的社區(qū)
還有一個很重要的特點是,國內(nèi)的go的社區(qū)十分的活躍,這對于go在國內(nèi)的普及起到了很大的作用。
用go的優(yōu)勢
先說一下我對go語言的看法,我認為go在服務(wù)器這塊是非常有優(yōu)勢的。以后如果有高并發(fā)的應(yīng)用場景,那么大概率這個服務(wù)就是用go寫的。不知道大家有沒有發(fā)現(xiàn),摩爾定律正在失效。近十年內(nèi),硬件的原始處理能力都沒有太大的提升。顯然,一味的增加晶體管的數(shù)量已經(jīng)不是解決問題最好的方法。
nAsA前不久發(fā)布到官網(wǎng)然后又迅速刪掉的文章透露了,google可能已經(jīng)實現(xiàn)了量子霸權(quán),通俗一點說就是擁有超越所有傳統(tǒng)計算機的計算能力。而放置更多的晶體管的代價也越來越高,所以現(xiàn)在廠商都在向處理器中添加更多的內(nèi)核來提升性能。
就像大家熟悉的Java,雖然Java本身支持多線程,但是在Java上使用多線程編程代碼算是比較昂貴的。在Java中創(chuàng)建一個新的線程就會消耗接近1m左右的內(nèi)存。假如你真的需要支持運行上千個線程,那么服務(wù)很可能運行著就oom了。除了內(nèi)存消耗外,還會存在由于支持多線程帶來的并發(fā)和死鎖等問題。
而go中,使用協(xié)程來代替線程。而且一個協(xié)程所消耗的內(nèi)存比線程少了很多倍。同樣的物理設(shè)備限制,你可能只能啟動最多幾千個線程,而協(xié)程能夠啟動上百萬個。而且不同的goroutine可以通過信channel進行安全的通信。
游戲服務(wù)器和web服務(wù)器的區(qū)別
有些對游戲服務(wù)器的介紹可能會說,游戲服務(wù)器是一個需要長期運行的程序,然后怎么怎么樣。我個人認為web服務(wù)器一樣的需要長期運行,也需要響應(yīng)不定點不定時來自用戶的請求。兩者從宏觀上來看其實沒有本質(zhì)的區(qū)別。同時web服務(wù)器也會對于穩(wěn)定性和性能有要求,游戲服一般分為大小服,我們這里都按照小服舉例子。
狀態(tài)
首先要提到的就是狀態(tài)??赡苣銜犝f過一個概念,游戲服務(wù)器是有狀態(tài)的,而web服務(wù)器是無狀態(tài)的。什么意思呢?web服務(wù)器的數(shù)據(jù)流大多直接會到數(shù)據(jù)庫中。而游戲服務(wù)器的數(shù)據(jù)流首先會到內(nèi)存中,然后定期的寫入數(shù)據(jù)庫(落地)。
換句話說,游戲服務(wù)器本身的數(shù)據(jù)與數(shù)據(jù)庫中的數(shù)據(jù)在運行期間會存在一個數(shù)據(jù)不一致的窗口。如果此時游戲服務(wù)器宕機了,那么就會造成數(shù)據(jù)首先到的內(nèi)存數(shù)據(jù)與數(shù)據(jù)庫存的數(shù)據(jù)不一致。
而web服務(wù)器則不會有這樣的問題,web所有的數(shù)據(jù)狀態(tài)都會落地,而且可以針對操作加上事務(wù),不用擔心因為操作失敗而引入臟數(shù)據(jù)。正因為有了狀態(tài)的約束,游戲服務(wù)器就會很慎重的使用內(nèi)存、cpU。以求在資源有限的情況下,最大化的提高的承載量,并且降低服務(wù)延遲。當然,web服務(wù)器會為了降低某個接口的響應(yīng)時間而去做對應(yīng)的優(yōu)化。
擴容
在web服務(wù)器中,如果你不能評估一個服務(wù)所面臨的壓力,又不想因為瞬時的熱點訪問導致服務(wù)直接不可用的話,完全可以設(shè)置成自動擴容,因為每個服務(wù)只是單純的接收請求,然后處理請求、返回結(jié)果,不會將數(shù)據(jù)保存在服務(wù)器的內(nèi)存中。要有數(shù)據(jù)存到內(nèi)存,那也是在Redis中。而Redis數(shù)據(jù)丟失對數(shù)據(jù)的一致性基本沒有影響。
但是在游戲服務(wù)器這邊很難做到像web那樣靈活。首先,數(shù)據(jù)的流向不是數(shù)據(jù)庫,而是內(nèi)存。
舉個很簡單的例子,玩家的主城被攻打著火了,如果有了自動擴容,很有可能在落地的窗口內(nèi),玩家再請求一次,請求到了另一個實例。主城又沒有著火了。因為數(shù)據(jù)都會先存在內(nèi)存中。
再舉一個例子,玩家氪金買了一個禮包。然后退出游戲,落地窗口內(nèi)再次上線沒了。這就不是單純的數(shù)據(jù)問題了,玩家這是花了真金白銀買的道具,突然就沒了,一兩個還好處理,如果多個玩家都出現(xiàn)這樣的問題,那這就屬于嚴重的線上事故了。修復(fù)數(shù)據(jù)的工作量十分的大。
所以,對于一個游戲服務(wù)器,所能使用的內(nèi)存和cpU的資源是非常有限的,不像web服務(wù)器可以不用花很大的代價做到橫向擴展。這也就是為什么游戲服務(wù)器會十分十分的注重代碼的性能以及穩(wěn)定性。
穩(wěn)定
就像上面說的例子,如果游戲服務(wù)器運行中出了bUg,導致服務(wù)直接不可用,或者說通過這個bUg刷到了大量的道具,將是一個非常嚴重的線上事故。
而對于web服務(wù)器來說,如果是管理系統(tǒng)之類的,有可能會有臟數(shù)據(jù)值得一提的是,臟數(shù)據(jù)對于web來說,排查起來也是一件很頭疼的事情。如果沒有臟數(shù)據(jù),只是服務(wù)暫且不可用,而且如果用的是微服務(wù)架構(gòu),重啟服務(wù)的代價是相對來說比較小的,只有正在重啟的服務(wù)的業(yè)務(wù)是不可用的,其余的部分則可以正常的訪問。
而對于游戲服務(wù)器來說,服務(wù)器重啟影響的是全服的玩家。玩家在停服期間,甚至連游戲都進不了,特別的影響玩家體驗。而且,如果停服之前服務(wù)器的數(shù)據(jù)落地出現(xiàn)了問題,服務(wù)重啟之后會將數(shù)據(jù)從數(shù)據(jù)庫load到內(nèi)存中,此時同樣會造成數(shù)據(jù)不一致的問題。
性能
從我的經(jīng)驗來看,在做web服務(wù)器的時候,沒有為了減少gc的壓力,為了少占用內(nèi)存去做過多的優(yōu)化。當然這是因為項目本身的體量不大,如果Qps很高的話,web服務(wù)器同樣很需要注重性能,只不過游戲服務(wù)器需要一直特別注意這個方面。
不過在web,如果訪問量很大的話導致單個服務(wù)不能扛住壓力,大部分人首先想到的解決方案應(yīng)該就是搞多個實例,畢竟可以做到很輕松的橫向擴展。
在游戲服務(wù)器里,會把服務(wù)器的資源看的相當?shù)膶氋F。例如,能不落地的字段就絕對不要落地,某個字段的值可以通過已知的條件算出來的,就盡量不要定義在代碼里。不過這也要看具體情況權(quán)衡運算量和調(diào)用的頻率。因為上線之后,如果遇到了數(shù)據(jù)不一致,維護的數(shù)據(jù)越少,修復(fù)數(shù)據(jù)的難度就越小。
嚴謹
這[美國主機租用]一點上來說,我認為是兩者都很關(guān)注的一個重點。只不過,在游戲服務(wù)器的某些情況中,如果服務(wù)器拋出異?;蛘遬anic。其造成的后果會被游戲特殊的環(huán)境放大。
例如,召回你的在外部隊失敗了,那么部隊就會一直在外面且不可用。這跟在瀏覽器中點一個按鈕沒有反應(yīng)比起來,影響相對較小。而且使用微服務(wù)架構(gòu),在修復(fù)問題之后可以以很低的成本來重啟對應(yīng)的服務(wù),而游戲服務(wù)器中還要修復(fù)一次數(shù)據(jù)。
再舉一個很極端的例子,點擊商店,玩家要準備氪金了。但是卻發(fā)現(xiàn)進不了商店,也可能不能獲取商品列表。這些會直接影響到游戲的體驗,甚至收入。
而對于web來說,服務(wù)器的穩(wěn)定性同樣很重要。不然根據(jù)業(yè)務(wù)的不同,造成后果的嚴重性也有可能不同。影響了用戶體驗,就會直接影響到產(chǎn)品的口碑。
數(shù)據(jù)傳輸格式
熟悉web的都知道,數(shù)據(jù)傳輸格式是Json。而在游戲服務(wù)器中是protobuf,是由google開發(fā)的數(shù)據(jù)傳輸格式,與Json類似。protobuf是二進制的,二進制數(shù)據(jù)量會比Json更小一點。而且,如果傳輸?shù)淖侄问强罩?,就不會被傳輸。而Json如果是空值,一樣的也會被傳輸。
無論是在什么樣的環(huán)境中,舉個例子,node.js和Java中,protobuf的性能表現(xiàn)都比Json好。在Java中,protobuf甚至要比Json快了接近80%。如果Java的服務(wù)之間通信有了性能瓶頸, 可以考慮服務(wù)之間使用Rpc來通信。
但是凡事都具有兩面性。protobuf的缺點仍然存在:
文檔較少
社區(qū)與Json的對比起來
可讀性沒有Json好
總結(jié)
以上就是這兩個月以來,總結(jié)的兩者的區(qū)別。只是從大體上做了一個對比,并沒有具體深入細節(jié)。細節(jié)的話有可能會在以后單獨的來介紹。(來源:sH的全棧筆記)
本公司專業(yè)提供最安全的海外游戲解決方案、游戲數(shù)據(jù)安全解決方案、游戲服務(wù)器配置安全、游戲服務(wù)器架設(shè)方案。詳詢本公司客服電話400-630-3752。
香港獨立服務(wù)器租用的安全性表現(xiàn)在哪個
香港獨[vps網(wǎng)站根目錄]立服務(wù)器更受站長青睞的原因,不外乎是因為獨立服務(wù)器擁有更多的自主性、更強的安全性和卓越的性能等原因。小Y相信大家對于香港獨立服務(wù)器擁有更好的自主[托管服務(wù)器]性和性能都是可以理解的,但是安全性這一方面還是存在疑問,因為不知道香港獨立服務(wù)器更強的安全性是怎么樣的?表現(xiàn)是如何?
一、服務(wù)器隔離
使用香港獨立服務(wù)器托管業(yè)務(wù),是需要服務(wù)器完全控制的企業(yè)首選。通過定制化的業(yè)務(wù)托管方案,您將擁有一個完整的物理服務(wù)器,您可以隨意添加和刪除資源。無論您是建立網(wǎng)站、托管海量玩家在線的游戲還是開發(fā)設(shè)計應(yīng)用程序,您都可以利用整臺服務(wù)器大量資源來有效地完成項目和業(yè)務(wù)相關(guān)任務(wù)。您不必再擔心過度負載或者難以充分利用您所支付的磁盤空間、帶寬和CPU。無論何時需要添加或刪除資源,您都可以方便地進行。
二、頂級安全
當涉及到安全性時,沒有比獨立服務(wù)器更好的托管解決方案。除了無限的資源,無與倫比的安全性也是企業(yè)選擇香港獨立服務(wù)器的主要原因之一。值得信賴的香港服務(wù)器供應(yīng)商通常會采取措施從數(shù)據(jù)中心角度保障服務(wù)器本身的安全,同時,您可以利用最高管理權(quán)限部署最新的安全軟件、升級和修補程序漏洞,以及其他所有安全保護措施,而不必擔心資源瓶頸。無論您的安全和隱私要求如何,香港獨立服務(wù)器都能成為您實現(xiàn)關(guān)鍵任務(wù)數(shù)據(jù)保護的理想選擇。
三、無與倫比的性能表現(xiàn)
高性能和極低甚至無停機時間是眾多企業(yè)選擇香港獨立服務(wù)器的重要出發(fā)點。獨享服務(wù)器的優(yōu)質(zhì)資源可以消除來自共享環(huán)境下多用戶或多業(yè)務(wù)數(shù)據(jù)和資源的問題風險。如果使用共享主機,您的使用體驗可能受到其他租戶濫用資源等行為的影響,最終很容易使您的業(yè)務(wù)拓展陷入僵局。香港獨立服務(wù)器,可允許用戶獨占整臺物理服務(wù)器資源,確保只有受限制的用戶組可以訪問該資源。這樣一來,您的業(yè)務(wù)運行不會受到過度擁擠或失去潛在客戶的風險影響。
YINGSOO免費熱線:4006_303_752
熱門文章:【香港遠程控制服務(wù)器是如何使用的】【攻擊打不垮】【香港服務(wù)器2香港服務(wù)器200元永久能信嗎】【國外服務(wù)器ip大全】【華為云香港服務(wù)器】【企業(yè)應(yīng)該怎樣進行云遷移】【影響浙江服務(wù)器托管價格因素】【浙江服務(wù)器租用】【永久免費香港虛擬主機】【dns服務(wù)器未響應(yīng)】【流媒體怎么選服務(wù)器】【香港機房價格】【國內(nèi)云主機評測該怎么做呢】【泰州BGP】【裸金屬服務(wù)器和云主機服務(wù)器】【德國服務(wù)器該如何選擇】【什么情況下電子商務(wù)網(wǎng)站會選擇俄羅斯云主機】【低延遲直播服務(wù)器】【YINGSOO香港服務(wù)器托管需要注意什么】【香港ecs】
YINGSOO日本主機服務(wù)商_低至148元/月_注冊領(lǐng)代金券
穩(wěn)定,性價比超高,按需配置購買,滿足不同需求,日本主機服務(wù)商免備案,高級DDOS防護,專業(yè)數(shù)據(jù)災(zāi)備方案,24小時貼心服務(wù)日本主機服務(wù)商.
http://maisonbaluchon.cn/products/cloud-jp.html
Yingsoo香港悍銘主機采用CN2電信直連香港,速度延遲低至10ms,快速,安全,穩(wěn)定,免備案9年運營經(jīng)驗, 服務(wù)超過1200家企業(yè)客戶,連續(xù)9年香港悍銘主機銷量持續(xù)增長
http://maisonbaluchon.cn/products/cloud-hk.html
版權(quán)聲明:本站文章來源標注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請保持原文完整并注明來源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非maisonbaluchon.cn所屬的服務(wù)器上建立鏡像,否則將依法追究法律責任。本站部分內(nèi)容來源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來,僅供學習參考,不代表本站立場,如有內(nèi)容涉嫌侵權(quán),請聯(lián)系alex-e#qq.com處理。
關(guān)注官方微信