當前位置:首頁 » 雲伺服器 » go從零開始搭建游戲伺服器

go從零開始搭建游戲伺服器

發布時間: 2023-01-17 01:35:04

1. 使用Go 語言開發大型 MMORPG 游戲伺服器怎麼樣

從2013年起,經朋友推薦開始用Golang編寫游戲登陸伺服器, 配合C++做第三方平台驗證. 到編寫獨立工具導表工具GitHub - davyxu/tabtoy: 跨平台的高性能便捷電子表格導出器. 以及網路庫GitHub - davyxu/cellnet: 簡單,方便,高效的Go語言的游戲伺服器底層. 最終使用這些工具及庫編寫整個游戲伺服器框架, 我的感受是很不錯的
細節看來, 有如下的幾個點:
語言, 庫
Golang語言特性和C很像, 簡單, 一張A4紙就能寫完所有特性. 你想想看, C++到了領悟階段, 也只用那幾個簡單特性, 剩下的都是一大堆解決各種內存問題的技巧. 而Golang一開始就簡單, 何必浪費生命去研究那一大堆的奇技淫巧呢?
Golang的坑只有2個:1. interface{}和nil配合使用, 2. for循環時, 將循環變數引入閉包(Golang, Lua, C#閉包變數捕獲差異) 完全不影響正常使用, 復合語言概念, 只是看官方後面怎麼有效的避免
用Golang就忘記繼承那套東西, 用組合+介面
用Golang伺服器如何保證解決游戲伺服器存檔一致性問題? stop the world是肯定的, 但是Golang可以從語言層並發序列化玩家數據, 再通過後台存檔
channel是goroutine雖然是Golang的語言特性. 但是在編寫伺服器時, 其實只有底層用的比較多.
Golang的第三方庫簡直多如牛毛, 好的也很多
不要說模板了, C#的也不好用, 官方在糾結也不要加, 使用中, 沒模板確實有點不方便. 用interface{}/反射做泛型對於Golang這種強類型語言來說,還是有點打臉

運行期
Golang和C++比性能的話, 這是C++的優勢, Golang因為沒虛擬機, 只有薄薄的一層調度層. 因此性能是非常高的, 用一點性能犧牲換開發效率, 妥妥的
1.6版後的GC優化的已經很好了, 如果你不是高性能,高並發Web應用, 非要找出一堆的優化技巧的話. 只用Golang寫點游戲伺服器, 那點GC損耗可以忽略不計
和其他現代語言一樣, 崩潰捕捉是標配功能, 我用Golang的伺服器線上跑, 基本沒碰到過崩潰情況
熱更新: 官方已經有plugin系統的提交, 跨平台的. 估計很快就可以告別手動cgo做so熱更新
開發, 調試, 部署, 優化
LiteIDE是我首選的Golang的IDE, 雖然有童鞋說B格不高. 但這估計實在是找不到缺點說了, 別跟我說Visual Studio, 那是宇宙級的...
曾經聽說有人不看好Golang, 我問為啥: 說這么新的語言, 不好招人,後面打聽到他是個策劃... 好吧
真實情況是這樣的: Golang對於有點編程基礎的新人來說, 1周左右可以開始貢獻代碼. 老司機2~3天.
開發效率還是不錯的, 一般大的游戲功能, 2*2人一周3~4個整完. 這換C++時代, 大概也就1~2個還寫不完. 對接伺服器sdk的話, 大概1天接個10多個沒問題
Golang自帶性能調優工具, 從內存, CPU, 阻塞點等幾個方面直接出圖進行分析, 非常直觀, 可以參考我博客幾年前的分析: 使用Golang進行性能分析(Profiling)
Golang支持交叉編譯, 跨平台部署, 什麼概念? linux是吧? 不問你什麼版本, 直接windows上編譯輸出一個elf, 甩到伺服器上開跑.不超過1分鍾時間..

2. go 語言適合做哪些開發

應用於搭建 Web 伺服器,存儲集群或類似用途的巨型中央伺服器的系統編程語言。

Go 是谷歌的編程語言,而不是社區的。在這位博主看來,雖然 Go 語言擁有一個貢獻者社區,但是它並不是社區的項目,只是谷歌的一個項目。所以只要是谷歌反對的東西,沒有人可以把這個東西加到 Go 語言中。

在 Go 語言模塊系統上發生的一件事情,谷歌 Go 語言核心團隊的一名成員放棄了由外部 Go 社區開發的一個模塊系統,因為它使用了另一種不同的模型。Go 語言擁有一個貢獻者社區,但是它並不是一個社區項目。

3. CS:GO是如何建立游戲的呢

找到左上角的那個按鍵{叫什麼我忘了},點開,會有幾個選項,然後點有BOT的那個,
當然,這比較麻煩,你也可以把語言調成中文,正版去找STEAM,盜版,去找游戲根目錄下的rev.ini文件,用查找找到#language=和language=,把後面的都改成sChinese。完成

4. go語言適合做什麼

Go語言。他主要是在一些網頁版的伺服器中用於系統編程的一種語言。他是谷歌開發的一種編程語言。在一定程度上,谷歌有一定的壟斷作用。不能隨隨便便的在語言當中添加其他的語言成分。

5. 使用Go 語言開發大型 MMORPG 游戲伺服器怎麼樣

1.為什麼golang的開發效率高?

golang是一編譯型的強類型語言,它在開發上的高效率主要來自於後發優勢,不用考慮舊有惡心的歷史,又有一個較高的工程視角。良好的避免了程序員因為「 { 需不需要獨佔一行 」這種革命問題打架,也解決了一部分趁編譯時間找產品妹妹搭訕的階級敵人。
它有自己的包管理機制,工具鏈成熟,從開發、調試到發布都很簡單方便;
有反向介面、defer、coroutine等大量的syntactic sugar;
編譯速度快,因為是強類型語言又有gc,只要通過編譯,非業務毛病就很少了;
它在語法級別上支持了goroutine,這是大家說到最多的內容,這里重點提一下。首先,coroutine並不稀罕,語言並不能超越硬體、操作系統實現神乎其神的功能。golang可以做到事情,其他語言也可以做到,譬如c++,在boost庫裡面自己就有的coroutine實現(當然用起來跟其他boost庫一樣惡心)。golang做的事情,是把這一套東西的使用過程簡化了,並且提供了一套channel的通信模式,使得程序員可以忽略諸如死鎖等問題。

goroutine的目的是描述並發編程模型。並發與並行不同,它並不需要多核的硬體支持,它不是一種物理運行狀態,而是一種程序邏輯流程。它的主要目的不是利用多核提高運行效率,而是提供一種更容易理解、不容易出錯的語言來描述問題。

實際上golang默認就是運行在單OS進程上面的,通過指定環境變數GOMAXPROCS才能轉身跑在多OS進程上面。有人提到了網易的pomelo,開源本來是一件很不錯的事情,但是基於自己對callback hell的偏見,我一直持有這種態度:敢用nodejs寫大規模游戲伺服器的人,都是真正的勇士 : ) 。

2、Erlang與Golang的coroutine有啥區別,coroutine是啥?

coroutine本質上是語言開發者自己實現的、處於user space內的線程,無論是erlang、還是golang都是這樣。需要解決沒有時鍾中斷;碰著阻塞式i\o,整個進程都會被操作系統主動掛起;需要自己擁有調度控制能力(放在並行環境下面還是挺麻煩的一件事)等等問題。那為啥要廢老大的勁自己做一套線程放user space裡面呢?
並發是伺服器語言必須要解決的問題;
system space的進程還有線程調度都太慢了、佔用的空間也太大了。
把線程放到user space的可以避免了陷入system call進行上下文切換以及高速緩沖更新,線程本身以及切換等操作可以做得非常的輕量。這也就是golang這類語言反復提及的超高並發能力,分分鍾給你開上幾千個線程不費力。

不同的是,golang的並發調度在i/o等易發阻塞的時候才會發生,一般是內封在庫函數內;erlang則更誇張,對每個coroutine維持一個計數器,常用語句都會導致這個計數器進行rection,一旦到點,立即切換調度函數。

中斷介入程度的不同,導致erlang看上去擁有了preemptive scheling的能力,而golang則是cooperative shceling的。golang一旦寫出純計算死循環,進程內所有會話必死無疑;要有大計算量少i\o的函數還得自己主動叫runtime.Sched()來進行調度切換。

3、golang的運行效率怎麼樣?

我是相當反感所謂的ping\pong式benchmark,運行效率需要放到具體的工作環境下面考慮。

首先,它再快也是快不過c的,畢竟底下做了那麼多工作,又有調度,又有gc什麼的。那為什麼在那些benchmark裡面,golang、nodejs、erlang的響應效率看上去那麼優秀呢,響應快,並發強?並發能力強的原因上面已經提到了,響應快是因為大量非阻塞式i\o操作出現的原因。這一點c也可以做到,並且能力更強,但是得多寫不少優質代碼。

然後,針對游戲伺服器這種高實時性的運行環境,GC所造成的跳幀問題確實比較麻煩,前面的大神 @達達 有比較詳細的論述和緩解方案,就不累述了 。隨著golang的持續開發,相信應該會有非常大的改進。一是屏蔽內存操作是現代語言的大勢所趨,它肯定是需要被實現的;二是GC演算法已經相當的成熟,效率勉勉強強過得去;三是可以通過incremental的操作來均攤cpu消耗。

用這一點點效率損失換取一個更高的生產能力是不是值得呢?我覺得是值得的,硬體已經很便宜了,人生苦短,讓自己的生活更輕松一點吧: )。

4、基於以上的論述,我認為採用go進行小范圍的MMORPG開發是可行的。

6. 使用Go 語言開發大型 MMORPG 游戲伺服器怎麼樣

如果跟C語言比,大部分腳本都勝出啊。Go,
Node.js,
Python
......
網易弄過一個Node.js的開源伺服器框架。
至於IDE,
不重要,做伺服器開發很少會要開著IDE調試的。最常用的手段就是打Log.
設置了斷點也很難調,多個客戶端並發。
那種單客戶端連接進來就可以重現的bug倒是可以用IDE調,但是這種bug本來就容易解決。
用腳本語言,有一個很大的好處是容易做自動測試,可以更好地保證代碼質量。
--------------------------
開發效率當然是腳本高。運行效率,其實更重要的是並發,框架合理的話增加機器就可以直接提高效率增加人數。

7. 我的世界電腦版伺服器怎麼創建

看在50財富的份上,我自己開一次服!

以下為官方開服方法,需要購買正版(理論上演示版也可以,網上下載Minecraft正版啟動器(版本號只能是2.0以及以上,這樣才有中文界面和服務端下載),官網以前可以下載啟動器,現在必須購買正版):

首先,先官網下載Minecraft啟動器:Minecraft.net

然後注冊賬號、購買游戲、登錄。

進入啟動器以後,點擊「啟動選項」選項卡,然後點「新建」,然後選擇版本(比如)1.8?

再點版本選擇右邊原諒色的「下載服務端」。

會自動跳轉到亞馬遜進行下載,下載完成以後,直接用java打開這個後綴為.JAR的文件。

右側信息欄最後一行顯示「You need to agree to the EULA in order to run the server. Go to eula.txt for more info.」是正常的,然後關掉服務端。

接下來,你會發現服務端核心文件所在的文件夾下多了一些奇形怪狀的東西,總的來說,就是「EULA」和「server.properties」,先用記事本打開EULA。

最後一行,你會看到eula=false,把等號後面改成true,重新打開服務端......

然後會生成存檔之類的玩意兒,這些高級的後面會提到的。當你看到「Done (x.x s)! For help, type "help" or "?"」的時候,你就開服成功了!

接下來聊一聊怎麼設置這個東西。

確保服務端處於關閉狀態時,用寫字板或記事本打開server.properties文件,修改設置,下面是每一個設置的注釋:(只能修改等號後面的內容,布爾值true為真,false為假)

generator-settings= 不管它,默認為空

op-permission-level= OP許可權等級,也沒有修改的必要,默認為4

allow-nether= 是否生成下界,默認為true,如果只是小游戲服,建議改成false,但是改了就沒有下界了

resource-pack-hash= 伺服器資源包地址(下載地址),這個資源包強制玩家安裝,默認為空,無特殊需要不需要管

level-name= 世界名稱,自己想,默認為world

enable-query= 不知道什麼意思,默認為false

allow-flight= 允許飛行,不允許的話生存模式移動速度過快直接T出,默認為false

announce-player-achievements= 玩家獲得成就時是否全服都看得見,默認為true

server-port= 伺服器埠,默認為25565,可以設置為60-65535之間的任何數

max-world-size= 最大世界尺寸,降低它可以有效控制存檔大小,最高且默認為29999984

level-type= 世界類型,默認為DEFAULT,其他世界類型Minecraft語言調成英文就能知道

enable-rcon= 客戶端是否接收伺服器遠程數據,默認為false,最好別動

level-seed= 世界種子,默認為空

force-gamemode= 強制游戲模式,除了OP全是默認游戲模式,默認為false

server-ip=伺服器IP,接路由器的填內網IP,直連服務商的填外網IP

network-compression-threshold=網路封包壓縮的閥值,默認為256,最小設置為16

max-build-height= 最高建築高度,最大值和默認值都是256

spawn-npcs= 生成村民,默認為true

white-list= 使用白名單,建議為false,默認為false

spawn-animals= 生成動物(除怪物、村民外的生物),默認為true

hardcore= 極限模式,生存玩家死亡後永久進入旁觀模式,默認為false

snooper-enabled= 使用音樂,默認為true

online-mode=在線模式,俗稱正版驗證,非正版服千萬改成false,默認值是true

resource-pack= 強制資源包名字,建議且默認留空

pvp= 開啟pvp(玩家攻擊玩家),默認為true

difficulty= 難度,0和平,1簡單,2普通,3困難,默認為1

enable-command-block= 啟用命令方塊,建議改成true,默認為false

gamemode= 游戲模式,0生存,1創造,2冒險,3旁觀者,默認值為0

player-idle-timeout= 這不用管,默認值為0

max-players= 最大玩家數,越多伺服器峰值負載越大,建議改得越小越好,默認為20

max-tick-time= 最大響應時間,不懂就不要改,默認為60000

spawn-monsters= 生成怪物,默認為true

generate-structures= 生成建築(如神廟,要塞,村莊等),默認為true

view-distance= 視距,越大伺服器和客戶端載荷越大,最高為12,默認為10

motd= MOTD,伺服器介紹,隨便寫,默認值就不用管了,是A Minecraft Server

具體白名單和黑名單建議網上搜索,再進行設置

注意:內網開服外網無法訪問,需要進行內網映射或轉發,具體請自行搜索,網上有很多教程

因為我用1.8的設置舉例子,所以部分設置缺失或者高版本服務端有其他更多的設置,如有疑問,歡迎追問

另外,因為我拼了老命也要拿到50財富,所以你需要什麼版本的服務端,我可以直接發給你地址,就不用下載正版啟動器了!(正版下載速度實在太......)

8. gobelieveio伺服器怎麼搭建

每個伺服器搭建的流程不一樣,我是用的小鳥雲伺服器。不懂的可以問他們客服

9. 用go來開發MMO游戲伺服器有哪些坑

用Go開發大型mmorpg服務端不會有問題的,如果掉坑裡肯定不會是語言的問題。唯一比較可能掉進去的坑就只有GC,其實很容易預防和調整的,具體細節可以看我博客分享的文章。但是技術選型不只是選語言,如果當時我手頭有一套性能滿意,開發效率OK,人員補給不會有問題的技術方案,不管是什麼語言的,我肯定不會放棄它而選擇冒險的。

熱點內容
scratch少兒編程課程 發布:2025-04-16 17:11:44 瀏覽:624
榮耀x10從哪裡設置密碼 發布:2025-04-16 17:11:43 瀏覽:355
java從入門到精通視頻 發布:2025-04-16 17:11:43 瀏覽:69
php微信介面教程 發布:2025-04-16 17:07:30 瀏覽:294
android實現陰影 發布:2025-04-16 16:50:08 瀏覽:786
粉筆直播課緩存 發布:2025-04-16 16:31:21 瀏覽:336
機頂盒都有什麼配置 發布:2025-04-16 16:24:37 瀏覽:201
編寫手游反編譯都需要學習什麼 發布:2025-04-16 16:19:36 瀏覽:796
proteus編譯文件位置 發布:2025-04-16 16:18:44 瀏覽:353
土壓縮的本質 發布:2025-04-16 16:13:21 瀏覽:581