我正在使用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次ping失败的时间),对我的情况来说太长了,我可以吗?调整它以及如何?
当我离开此页面(关闭标签页或跳转到其他页面)时,一段时间后会出现一些错误消息,如下所示:
[SESSION]未捕获的异常:&#34; {OpaRPC_Server:{timeout:{client:{client:$&#34; 46rrpwmeiq28ql0d8lgz7e35zt8d701c&#34; $;页面:$ 934885115 $}; fun_id:$&#34; __ set_game_Mygame&#34; $}}}&#34; 跳过以下消息: 如果你想(msg,st,ctx)调试打印设置调试变量session_debug&gt; = 200
我认为这是因为该页面不再存在,只是功能&#39; game_msg_received&#39;收到游戏信息时仍然会尝试通知此页面,那么我该如何避免此错误?
答案 0 :(得分:3)
1 - 您无法更改断开连接延迟,但也许您可以使用非活动事件。
如果客户端没有服务器视点的活动(rpc调用,发送消息,......),则会引发此事件。
使用ClientEvent.set_on_inactive_client
注册非活动事件的回调,使用ClientEvent.set_inactivity_delay
更改持续时间。
2 - 确实是因为页面不再存在。您应该从网络中删除您的观察者。请使用Network.unobserve
。
最后你的代码看起来应该是那样的
// set default inactive delay
// or if you change the 1st params
// you can set for a specific client
ClientEvent.set_inactive_delay(none, /*wanted delay*/)
function page_ready(){
// observe game messages
obs = Network.observe(game_msg_received,game_channel);
// set inactive function
_ = ClientEvent.set_on_inactive_client(function(c){
// remove the observer
Network.unobserve(obs);
//do something when client is disconnected
...
});
}