Pomelo客戶端握手
Pomelo在init初始化時(shí)會(huì)創(chuàng)建WebSocket連接锣险,并定義onopen
和onmessage
事件回調(diào)。當(dāng)連接建立后芯肤,onopen
被回調(diào)⊙辜客戶端首先會(huì)發(fā)起握手?jǐn)?shù)據(jù)包:
var obj = Package.encode(
Package.TYPE_HANDSHAKE,
Potocol.strencode(JSON.stringify(handshakeBuffer))
);
握手?jǐn)?shù)據(jù)包的格式為type、length油吭、body,需傳入的參數(shù)為type和body婉宰。
Pomelo服務(wù)端心跳處理邏輯
- 握手完畢后bybirdsocket分發(fā)heartbeat消息歌豺,在commands中的heartbeat中處理心包,在heartbeats字段中存儲(chǔ)計(jì)時(shí)器类咧,在心跳超時(shí)后將會(huì)發(fā)送心跳包蟹腾,并注冊(cè)超時(shí)函數(shù)痕惋。
- 當(dāng)服務(wù)器接收到客戶端的心跳包后娃殖,在hybridsocket的handleHeartbeat中進(jìn)行處理值戳,分發(fā)heartbeat消息珊随。在commands中的heartbeat會(huì)先清理超時(shí)時(shí)間述寡。
Pomelo設(shè)置連接的心跳參數(shù)
$ vim game-server/app.js
const heartbeat = 10;
app.set("connectorConfig", {
connector:pomelo.connectors.hybirdconnector,
heartbeat:hearbeat,
timeout:hearbeat * 2,
disconnectOnTimeout:true,
handshake:function(msg, cb){
cb(null, {code:200, sys:{heartbeat:heartbeat};
}
});
Pomelo客戶端與服務(wù)器斷開(kāi)的情況分為兩種分別是直接斷開(kāi)和心跳超時(shí)
- 直接斷開(kāi)
客戶端監(jiān)聽(tīng)連接直接斷開(kāi)
pomelo.on("discount", function(){
});
- 心跳超時(shí)
客戶端監(jiān)聽(tīng)心跳超時(shí)造成連接斷開(kāi)
pomelo.on("heartbeat timeout", function(){
})