node.js適合遊戲後台開發嗎?_node.js

來源:互聯網
上載者:User

網站伺服器和遊戲伺服器是怎麼樣聯絡到一起的?

1. 遊戲分很多種,咱們先來看看MMORPG。

再怎麼簡單的RPG伺服器都免不了處理多人互動的情形,上百人在同一個情境裡面,每個用戶端都需要收到其他所有人的操作資訊。

其次,使用者的操作是非常頻繁的,一般的伺服器傾向於持有長串連。而且這些連結的是頻繁互動的,沒有明顯的持久的分區策略,所以限制了伺服器的橫向擴充,同一個情境往往只能放在一個物理機上面運行。

再次,端遊通常是不敢把邏輯運算放用戶端的,使用者分分鐘給你破解掉,改改金幣,刷兩件裝備再常見不過了。所以這一台地圖伺服器得驗證地圖內所有玩家的操作,並計算怪物AI、掉率等一系列商務邏輯。

我們可以看到,傳統遊戲伺服器與網頁伺服器具有明顯的區別,具有長串連、多廣播、有複雜的商務邏輯、分區策略受限等獨特的業務需求。

2. 咱們在來看看並髮帶給遊戲伺服器的好處是什麼。

並發實際上是一種程式邏輯流程,他是不需要多核物理支援的。大致意思就是讓多個獨立的邏輯流看上去像是在同時跑一樣。作業系統層級的並發就是多進程多執行緒模式。讓OS處理時鐘中斷,i\o阻塞等等問題。

對於 伺服器 而言,如果任務大部分的時間耗在i\o上,有了並發機制可以避免整個地圖服務被i\o訪問阻塞。一個任務阻塞的時候,把空餘計算資源分派到其他任務上去。在這種情況下,並發是有益於伺服器運行效率還有回應時間的。

對於程式員而言,獨立的邏輯流意味著可以在一個可靠、簡單、松耦合的上下文環境裡面,完成自己的任務。

因為讓OS處理常式邏輯切換得反覆陷入核心,有的人覺得這樣太慢,做了一些處於user space的線程,進程內自己控制多個邏輯流。因為語言描述能力的限制,在C/C++上面寫還有用這種東西都太麻煩。於是產生了erlang, go, lua裡面的coroutine文法糖。

node.js本質上也是自己控制多個邏輯流,但是這個邏輯流是根據i\o狀態還有優先順序分發的。在實際的實現中,它盡量採用非阻塞非同步i\o,單個任務調用i\o的時候,我就停掉它,等i\o完成的訊號發上來了,我再重啟它。

注意這一點,每次我會運行一個任務,直到它完成或者是發生i\o調用都不會主動切換至其他的程式流。那麼如果這一個任務裡面涉及過於大量的計算,那麼整個地圖進程都會被block在這裡。

而正因為node.js是非同步,所以需要不斷的寫回調監聽i\o完成的訊號。單個任務的邏輯流會多次的被打斷。當任務變得相當複雜的時候,即有所謂的callbak hell,會帶給調試開發非常大的麻煩。

3. 因為上面的原因,所以我不建議在非原型的MMORPG伺服器開發中使用node.js。

4.最近興起的手遊伺服器倒是挺適合node.js,因為手遊這玩意局限於網路問題,伺服器只能做關鍵資料驗證,也沒辦法處理特別多人互動的情形。伺服器端已經簡化得跟網頁伺服器沒啥區別了,商務邏輯也簡單,處理處理資料,然後持久化就成。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.