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在函式名前面的時候修飾的是函式返回值,在函式名後面表示是常成員函式,該函式...