1. 程式人生 > >Pomelo(一):網易開源基於 Node.js 的遊戲服務端框架

Pomelo(一):網易開源基於 Node.js 的遊戲服務端框架

  Pomelo 是基於 Node.js 的高效能、分散式遊戲伺服器框架。它包括基礎的開發框架和相關的擴充套件元件(庫和工具包),可以幫助你省去遊戲開發枯燥中的重複勞動和底層邏輯的開發。Pomelo 不但適用於遊戲伺服器開發, 也可用於開發高實時 Web 應用,它的分散式架構可以使 Pomelo 比普通的實時 Web 框架擴充套件性更好。

Pomelo 特性

  • 快速、易上手的遊戲開發模型和api
  • 高可伸縮的多程序架構, 支援MMO的場景分割槽和其它各類分割槽策略
  • 方便的伺服器擴充套件機制,可快速擴充套件伺服器型別和數量
  • 方便的請求、響應、廣播、伺服器通訊機制, 無需任何配置
  • 注重效能,在效能、可伸縮性上做了大量的測試、優化
  • 提供了較多擴充套件元件,包括遊戲開發常用的庫和工具包
  • 提供了完整的MMO demo程式碼(客戶端html5),可以作為很好的開發參考
  • 基於socket.io開發,支援socket.io支援的多種語言客戶端

Pomelo 的框架介紹

  Pomelo Framework的組成架構如圖所示:

  • Server management, pomelo 是個真正多程序、分散式的遊戲伺服器。因此各遊戲server(程序)的管理是pomelo很重要的部分,框架通過抽象使伺服器的管理非常容易。
  • Network,請求、響應、廣播、RPC、session 管理等構成了整個遊戲框架的脈絡,所有遊戲流程都構建在這個脈絡上。
  • Application, 應用的定義、component管理,上下文配置, 這些使pomelo framework的對外介面很簡單, 並且具有鬆耦合、可插拔架構。

Pomelo 的架構設計目標

  • 伺服器(程序)的抽象與擴充套件

  在 web 應用中, 每個伺服器是無狀態、對等的, 開發者無需通過框架或容器來管理伺服器。 但遊戲應用不同, 遊戲可能需要包含多種不同型別的伺服器,每類伺服器在數量上也可能有不同的需求。這就需要框架對伺服器進行抽象和解耦,支援伺服器型別和數量上的擴充套件。

  • 客戶端的請求、響應、廣播

  客戶端的請求、響應與 web 應用是類似的, 但框架是基於長連線的, 實現模式與 http 請求有一定差別。 廣播是遊戲伺服器最頻繁的操作, 需要方便的 API, 並且在效能上達到極致。

  • 伺服器間的通訊、呼叫

  儘管框架儘量避免跨程序呼叫,但程序間的通訊是不可避免的, 因此需要一個方便好用的 RPC 框架來支撐。

  • 鬆耦合、可插拔的應用架構。

  應用的擴充套件性很重要, pomelo framework 支援以 component 的形式插入任何第三方元件, 也支援加入自定義的路由規則, 自定義的 filter 等。

為什麼使用pomelo?

  高併發、高實時的遊戲伺服器的開發是很複雜的工作。跟 web 應用一樣, 一個好的開源容器或開發框架可以大大減少遊戲開發的複雜性,讓開發變得更加容易。遺憾的是目前在遊戲伺服器開發領域一直沒有太好的開源解決方案。 pomelo 將填補這個空白, 打造一款完全開源的高效能(併發)遊戲伺服器框架。 pomelo 的優勢有以下幾點:

  • 架構的可伸縮性好。 採用多程序單執行緒的執行架構,擴充套件伺服器非常方便, node.js 的網路 io 優勢提供了高可伸縮性。
  • 使用非常容易, 開發模型與web應用的開發類似,基於 convention over configuration 的理念, 幾乎零配置, api 的設計也很精簡, 很容易上手。
  • 框架的鬆耦合和可擴充套件性好, 遵循 node.js 微模組的原則, framework 本身只有很少的程式碼,所有 component、庫、工具都可以用 npm module 的形式擴充套件進來。任何第三方都可以根據自己的需要開發自定義 module。
  • 提供完整的開源 MMO 遊戲 demo 參考,一個超過1萬行程式碼的遊戲 demo,使開發者可以隨時借鑑 demo 的設計與開發思路。

如何使用pomelo開發?

  通過以下參考資料將使我們很快地熟悉 pomelo 的全貌與開發過程:

  通過demo程式碼的學習將使你熟悉一個完整MMO遊戲的開發:

相關推薦

Pomelo開源基於 Node.js遊戲服務框架

  Pomelo 是基於 Node.js 的高效能、分散式遊戲伺服器框架。它包括基礎的開發框架和相關的擴充套件元件(庫和工具包),可以幫助你省去遊戲開發枯燥中的重複勞動和底層邏輯的開發。Pomelo 不但適用於遊戲伺服器開發, 也可用於開發高實時 Web 應用,它的分散式架構可以使 Pomelo 比普通

絡駭客入門之絡編程絡應知應會

網絡網絡駭客入門之網絡編程(一):網絡應知應會一、計算機網絡在設計之初就決定了它結構簡單,傳輸可靠的特點,除此之外,它還能連接不同種類的計算機在網絡上,各個節點同等重要且必須有冗余路由二、網絡在理論上被分為七層,從下到上,物理層,數據鏈路層,網絡層,傳輸層,會話層,表示層,應用層在實際的應用上分為四層,即:鏈

手把手教你寫網路爬蟲1雲音樂歌單

Selenium:是一個強大的網路資料採集工具,其最初是為網站自動化測試而開發的。近幾年,它還被廣泛用於獲取精確的網站快照,因為它們可以直接執行在瀏覽器上。Selenium 庫是一個在WebDriver 上呼叫的API。WebDriver 有點兒像可以載入網站的瀏覽器,但是它也可以像BeautifulSoup

爬取雲音樂“三部曲”爬取歌手資訊!

提到歌神張學友,大家可能不會陌生或者說是如雷貫耳,他可是有著逃犯殺手之稱,這不明天1月11號是他2019世界巡迴演唱會《香港站》的開辦日期,不知香港警方有沒有做好抓逃犯的準備【手動滑稽】。對於歌神明天的演唱會,小編其實挺嚮往的,只是奈何年底了,天天要工作,作為一個程式猿,這也是沒辦法的,為了排遣內心

【小說連載】絡紅顏當你遇到一個不收錢的出租車司機

網絡 美女 職場 生活 小說 簡介:這是一段描寫網絡工程師生活的故事。故事中沒有英雄,沒有勵誌,也沒有所謂的雞湯文化和狼性文化。有的,或許是一種對技術的執著,對愛情的渴望或者是對名利的一種追求,但又能追求到什麽呢?聲明:本故事所出現的人名,公司名均為虛構,如有雷同恰屬巧合小說將在本站博客和

Spring Security嚮導翻譯

原文出自  https://spring.io/guides/topicals/spring-security-architecture Spring Security Architecture      This guide is a primer for Spring

玩轉OpenVswitch埠與

一、準備工作 作業系統:ubuntu 18.04 docker: 18.06.1-ce 要想在自己筆記本上進行較為複雜的網路拓撲模擬,除了藉助ovs,還需要有docker這個神器,docker安裝就不贅述了,貼個連結: 二、基本操作 1、網橋的增、刪、查 增

密碼朋克的社會實驗開燈看暗

密碼朋克的社會實驗(一):開燈看暗網 本文作者:karmayu、murphyzhang @雲鼎實驗室     ……2018年3月8日,某視訊網站800餘萬用戶資料在暗網銷售2018年8月1日,某省1000萬學籍資料出現在暗網2018年8月28日,某酒店集

Linux系統程式設計學習常見問題VMware虛擬機器下Ubuntu18.04突然上不了的問題解決方案

問題描述:VMware虛擬機器下Ubuntu18.04突然上不了網的問題:如下圖所示:   更改這裡的三種連線方式都是這樣  2.  分析:IP衝突或者配置出了問題,需重新更新設定。 3.  解決: (1)將模式調整為

Linux絡編程一個簡單的socket程序

服務 htonl 網絡 pre fin efi from ret span 服務器: /* *tcp_server.c */ #include <stdio.h> #include <sys/socket.h> #include <ne

開發開源爬蟲框架系列分析nutch,scrapy的爬蟲設計

1、Scrapy Engine(Scrapy引擎) Scrapy引擎是用來控制整個系統的資料處理流程,並進行事務處理的觸發。更多的詳細內容可以看下面的資料處理流程。 2、Scheduler(排程) 排程程式從Scrapy引擎接受請求並排序列入佇列,並在Scrapy引擎發出請求後返還給他們。 3、D

如何選擇開源許可協議瞭解協議

目前國內開源專案正在逐漸升溫,中國也開始有不少優秀的開源專案突顯出來。在大家摩拳擦掌準備加入開源大軍時,也要知道這個圈子裡的規則。技術人員不能只是研究技術,任何圈子都有規則,要知道了才能玩得好。前段時間有件關於開源軟體的事情挺熱鬧的,關於國內一個開發者把自己作品開源

javase複習整理基礎要點、重點、錯點、多執行緒梳理總結

最近抽出時間從新回頭複習了一下javase基礎,把自己以前理解的不透徹和易錯的知識點重新梳理了一下,便於以後查閱。那麼接下來就開始複習總結! 一、java語言基礎 1、在java中,邏輯運算子“&

工作流引擎Oozieworkflow

觸發 line last ssa pig oozie apt cnblogs 定時任務 1. Oozie簡介 Yahoo開發工作流引擎Oozie(馭象者),用於管理Hadoop任務(支持MapReduce、Spark、Pig、Hive),把這些任務以DAG(有向無環圖)方式

Spring 事務配置實戰過濾無需事務處理的查詢之類操作

log pla ssi pan spl tail gif aop img <tx:advice id="txAdvice" transaction-manager="transactionManager"> <tx:attributes

【SSH之旅】步步學習Hibernate框架關於持久化

stc localhost 對象 schema hbm.xml java let pass [] 在不引用不論什麽框架下,我們會通過平庸的代碼不停的對數據庫進行操作,產生了非常多冗余的可是又有規律的底層代碼,這樣頻繁的操作數據庫和大量的底層代碼的反復

CS231n基礎知識

深度學習 highlight 自己 元組 .py [0 upper bsp python 給自己新挖個坑:開始刷cs231n深度學習。 看了一下導言的pdf,差缺補漏。 s = "hello" print s.capitalize() # 首字母大寫; prints "

TCP/IP協議2絡設備

數據包 服務器 網絡設備 風暴 二層交換機 不同的 中繼器 tcp/ip 解決 1、中繼器(Repeater) 中繼器工作在OSI的一層,我們知道,超5類線的傳輸距離最大為100米,超過這個距離信號就會衰減,中繼器就是為了防止信號變差,將網絡信號進行再生和重定時。 2、

Javascript基礎簡單匯總元素獲取

問題 元素節點 all push 傳說 length [] nbsp 文檔 在頁面腳本中,如果要對頁面元素進行操作,那麽我們就要獲取到這個元素 那麽在獲取元素之前首先得要了解什麽是DOM(document object model) 在DOM,元素是以節點的形式表示的,每

elastic-job詳解數據分片

count 任務 不同的 應該 center shc 偶數 int ext 數據分片的目的在於把一個任務分散到不同的機器上運行,既可以解決單機計算能力上限的問題,也能降低部分任務失敗對整體系統的影響。elastic-job並不直接提供數據處理的功能,框架只會將分片項分配至各