pomelo 學習零碎記錄 2

2022-07-18 20:03:27 字數 1360 閱讀 6087

session物件包括

socketid(累加而來),

frontendid,

socket(siosocket),

sessionservice

客戶端伺服器互相通訊的msg結構

上行:id,route,body

下行:id,body

每次傳送和接收前需要分別編碼和解碼

客戶端請求的處理:

game-server/node_modules/pomelo/lib/components/connector.js

該檔案中的connector屬性預設為sioconnector(game-server/node_modules/pomelo/lib/connectors/sioconnector.js),客戶端的首次連線(connection)在sioconnector.js檔案中處理,然後會將連線的socket打包到siosocket中,並在其中處理message disconnect等事件. sioconnector和siosocket都繼承自eventemitter,所以2者都可以發出訊息, siosocket會將socket.io的連線事件處理後發給connector,以message訊息為例子:

首先在siosocket解碼,然後重組成msg物件,最後用self.emit('message', msg) 發出訊息

在connector.js中 

socket.on('message', function(msg) );

component.server為: game-server/node_modules/pomelo/lib/components/server.js

而其又呼叫game-server/node_modules/pomelo/lib/server/server.js的handle方法

在訊息路由到目標之前,先會用預製的所有過濾器對其進行處理,如果其中乙個過濾器返回錯誤,則訊息傳遞將終止

訊息的處理最終在server.js->handle->beforefilter->handlerservice.js->handle被正確呼叫

請求被前端伺服器handle後 ,connectror執行到:

resp = {

id: msg.id,

body: resp

component.session.sendmessage(session.id, resp);

其中resp為handle呼叫的next方法的第二個引數.

如果sessionservice初始化引數opts.senddirectly不為真:

接著,resp被放入到sessionservice中對應sid的佇列msgqueues中等候處理(預設20毫秒處理一次) 

否則直接呼叫session儲存的socket發出msg

零碎的記錄

高內聚 類與類之間的關係而定,高,意思是他們之間的關係要簡單,明了,不要有很強的關係,不然,執行起來就會出問題。乙個 類的執行影響到其他的類。低偶合 類內部的方法而言。把程式的功能盡量分散,別在乙個類裡只寫乙個或很好的方法,因為那樣會給你的除錯等帶來很多問題 出了錯你都不知道在什麼地方。通用模組的設...

記憶體管理 零碎記錄

1.以下方法中區域性變數myarray和全域性變數 sqldata.array引用了同一塊記憶體 當這個方法過了,這個區域性變數的指標就被銷毀,引用計數就由2變成1,所以這裡有乙個點要注意,在乙個方法中開了一塊記憶體,過了這個方法,是區域性變數的指標沒了,記憶體銷不銷毀看的是引用計數,跟方法過了沒有...

零碎的學習

bool operator const node n const egrep n v 0 9 0 9 123.txt su切換命令 反引號 代表命令 awk f addr sed i is pp not he 2 當const在函式名前面的時候修飾的是函式返回值,在函式名後面表示是常成員函式,該函式...