我正在使用Opa進行在線多玩家遊戲,並對如何操作客戶端連接有一些疑問。如何操縱客戶端連接
這裏是我的代碼片段:
function game_view(){
function page_ready(){
// observe game messages
_ = Network.observe(game_msg_received,game_channel);
// set disconnect function
_ = ClientEvent.set_on_disconnect_client(function(c){
//do something when client is disconnected
...
});
}
<div onready={function(_){ page_ready() }}>
//page content
...
</div>
}
斷接功能生效約2分鐘(我想這是4個平故障時間)後關閉我的標籤或窗口,它太長了對於我的情況,我可以調整它,以及如何?
當我離開這個頁面(關閉選項卡或跳轉到其他網頁),一段時間後,一些錯誤的信息將顯示如下:
[會議]未捕獲的異常:「{OpaRPC_Server:{ timeout:{client:{client:$「46rrpwmeiq28ql0d8lgz7e35zt8d701c」$; page:$ 934885115 $}; fun_id:$「__ set_game_Mygame」$}}}「 以下消息被跳過。: 如果你想要(msg,st,ctx)調試打印設置調試變量session_debug> = 200
我認爲這是因爲該頁面不再存在,而是有趣ction'game_msg_received'仍嘗試在收到遊戲消息時通知此頁面,那麼如何避免此錯誤?
謝謝您的回答,這是非常有用的。但我認爲不主動適合我的情況,因爲玩家可能長時間沒有動作,但仍然在比賽中,例如不是他/她。這與[Opa Poker](http://poker.mlstate.com)類似。我不知道Opa Poker如何解決它。我現在試圖在頁面準備好的時候定期發送心跳信號,這會花費太多嗎? – winbomb
是的,這是一個解決方案,如果您使用會話來實現您的心跳,它將通過心跳消耗一個消息。 –
我認爲更好的方法來實現你想要的東西,它是一個服務器會話和一個客戶端定時器,它只是向會話發送一個無效消息。但也許你也可以使用{卸載} Dom.event調用服務器斷開連接功能?如果客戶端正確關閉瀏覽器(不會崩潰,硬殺等),它應該被觸發。 –