Pomelo實現最簡單的通信-egret。

来源:http://www.cnblogs.com/z-coder/archive/2016/06/03/5556273.html
-Advertisement-
Play Games

昨天因為需要開始學習Pomelo 做H5游戲的服務端。 因為個人學習習慣,我從來不適合去跟著文檔看。一般我直接是看下大概的API,但是Pomelo的API全部都是英文的。 昨天我就告訴自己用一下午時間去做一個最基本的通信功能的DEMO。 安裝NODE.JS Phython VS 一切就緒之後就開始了 ...


昨天因為需要開始學習Pomelo 做H5游戲的服務端。

因為個人學習習慣,我從來不適合去跟著文檔看。一般我直接是看下大概的API,但是Pomelo的API全部都是英文的。

昨天我就告訴自己用一下午時間去做一個最基本的通信功能的DEMO。

 

安裝NODE.JS  Phython VS 一切就緒之後就開始了。

 

 

轉到目錄下麵,輸入命令 就會創建一個Pomelo項目 ,之後會要求選擇 個人理解就是通信方法把 。

選擇好之後就會生成項目目錄

目錄結構就是這樣的。

 

一開始我以為這樣就可以了啊,但是後來發現不對 總感覺少了點什麼,應該是基礎包吧?||環境包?個人理解就是支持程式跑起來的一些基礎類庫。

 

 

直接運行他,就可以了。

 

 

接下來我就瞅這個項目目錄結構 ,當然 我值看Game-server web-server沒大看 ,不過感覺大致差不大多吧。

 

 

先看了下app.js --

app.configure('production|development', 'connector', function(){//其實我不大瞭解這個方法的具體實現方式,但是我覺得他的功能大概就是設置Connector的連接方式。
app.set('connectorConfig',
{
connector : pomelo.connectors.hybridconnector,
heartbeat : 3,
useDict : true,
useProtobuf : true
});
});
  connector : pomelo.connectors.hybridconnector,【進去看他的代碼】

Pomelo.connectors.__defineGetter__('sioconnector', load.bind(null, './connectors/sioconnector'));

Pomelo.connectors.__defineGetter__('hybridconnector', load.bind(null, './connectors/hybridconnector'));

Pomelo.connectors.__defineGetter__('udpconnector', load.bind(null, './connectors/udpconnector'));
Pomelo.connectors.__defineGetter__('mqttconnector', load.bind(null, './connectors/mqttconnector'));

他設置了幾個幾個常量咯 根據這個方法選擇通信方式。

  設置完這些,然後我就開始琢磨怎麼連上我的第一個WebSocket伺服器,哪裡都不用改直接跑起來看下把 ,先連接上了再說下一步。

  

 

  其實應該去設置server.json的 裡面可以設置 服務埠跟 客戶端埠的,但是我直接用項目創建時候預設的把,上面有個clientPort

  那個是客戶端連接的埠,連接上去之後 

  

我用的是EGRET引擎,所以在論壇里直接找了Pomelo客戶端用的包,用上了 ,這樣 就連接上去了 。加下來才是終點

 

最簡單的通信,先看下客戶端我是這麼些的

  

  this.socket.request("connector.entryHandler.join", {//requst(@網友說這叫路由地址,在我看來這個參數就是寫Connector(伺服器路由?每個路由單獨處理屬於自己的工作 分工明確提高效率?).文件名(為毛不是類名).方法名--。那個在,@參數,@回調//這個回調 ,不是可以說是通信完成的回調,但也不能說完全就是,因為這個回調乾不幹活觸不觸發還要看服務端)
"uid":UID,
"rid":RID ,
"target": TAG
}, function (result) {
console.log(result);
});

})

/**
上面那是客戶端調用湖物端的方法,他那寫好了 就要在湖物端開始寫要觸發的方法了

**/
Handler.prototype.join = function (msg, session, next) {
var self = this;                    
console.log(msg.uid);  
var id = msg.uid + "*" + msg.rid;
console.log(id);    msg就是前端發過來的msg

var sessionService = self.app.get('sessionService');
next(null, {
code: 500,
error: true
});
return;

var chanel = this.ChannelServers.getChannel("pomelo", true); //關鍵就是這個Chanl啊 chanl就是一個對象,我理解就是一個麻將桌,你給他創建編號 就能王這個麻將桌裡面放人進去,嘿嘿 。所有用戶觸發JOIN的時候都會獲取叫“pomelo”的麻將桌,然後把自己加進去 ,後面那個參數就是如果麻將桌還沒創建 就創建一個新的
chanel.add(msg.uid, this.app.get('serverId'));//加入Chanel,UID的話 按正常的 應該是綁定sesson的uid 只是我把session-uid放在後面去綁定 所以就,這樣就區分了第二個參數 是綁定的是SESSION uid 還是每個玩家app裡面那個id ,答案是後者
var rid = msg.rid;
var uid = msg.uid;
msg.sid = msg.rid;
session.bind(uid);
session.set('rid', rid);
session.push('rid', function (err) {
});

  發送聊天消息-服務端

  
Handler.prototype.Chatto = function (msg, session, next) {
var uid = session.uid;
var sid = session.get("rid");
var uid = session.uid;

console.log("uid=" + uid + "--sid=" + sid);
var chanel = this.ChannelServers.getChannel("pomelo", true);
console.log(chanel.records);
next(null, {"msg": "uid=" + uid})
if (chanel.getMember(uid)) {
chanel.pushMessage("back", {"msg": "玩家:" + uid + "-->發佈信息"});
}
}}

其實按功能上來說 就是通過Chanel去轉發那些個你想要轉發出去的信息 ,所以說套路是這樣 更複雜的我也還沒做過 ,但是複雜的 就是 很多簡單的扣在一起換著玩法去寫吧。






  

 


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 模型驗證(Model Validation):是確保用戶接收的數據適合於綁定的模型,並且在不合適時,給用戶提供有用的信息,以幫助他們修正其問題的過程。 模型驗證過程一:檢查接收的數據——是保持域模型完整性的方式之一。 模型驗證過程二:幫助用戶修正問題。 示例項目介紹 項目模板:Basic 項目名稱: ...
  • ApiView是.net api的介面文檔查看網站,用於解決分散式開發過程中的Api介面管理和溝通問題。 自動生成api文檔; 方便調試及第三方開發人員對接,可以應用在asp.net mvc,wcf,webservice 中使用; 代碼及原理都很簡單,方便修改和完善。 ...
  • 在傳統的Spring MVC開發方法中,必須在Bean配置文件中為每個控制器類配置實例和請求映射和讓每個控制器類去實現或者擴展特定於框架的介面或者基類,不夠靈活。 如果Spring MVC可以自動偵測你的控制器類和請求映射,就能減少配置所需要的工作量。 Spring2.5支持一種基於註解的控制器開發 ...
  • Java 項目中常常回遇到發送郵件 Java 發送郵件有幾種,今天先給大家介紹用 HtmlEmail 來發送郵件,我這裡是用 Maven 來搭建的 HtmlEmail 可以抄帶HTML 首先 需要導入jar 包 然後我們來建立一個發送郵件的 Mail 類 JavaBean 然後再來創建一個發送郵件的 ...
  • 只需要加android:windowSoftInputMode="stateHidden|stateAlwaysHidden"就可以 如:<activity android:name=".My_Message" android:windowSoftInputMode="stateHidden|sta ...
  • 一、fstat函數:顯示文件的所有信息 二、文件讀取: 三、寫入文件: 四、文件操作的應用: 五、拷貝文件: 六、創建文件 創建文件夾: 創建文件: 七、刪除文件: 刪除文件夾: 刪除文件: ...
  • COMMAND 模式 command模式非常簡單,簡單到你無法想象的地方。 這就是一個command模式的樣子。也許你會覺得,這有點多此一舉嗎。但是當你使用他的時候,command模式就會閃現光華。 這樣一個場景:經理張三叫leader王二去開發一個項目, 王二就安排李四 去開發這個功能A。 李四何 ...
  • CSS3可以做動畫大家肯定都是耳熟能詳的了,但是大家有木有巧妙的利用這一個功能來製作一款漂亮的照片牆呢? 那麼今天我們就利用CSS3動畫這一特性來一起製作漂亮的照片牆吧! 第一部分:HTML 這裡我們首先放十張圖片在頁面上面。(有什麼靚照儘管上來哦!) 第二部分:CSS3 這一部分就是我們這節的重點 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...