如何操纵客户端连接

时间:2012-05-15 07:50:47

标签: opa

我正在使用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>
}
  1. 我关闭选项卡或窗口后断开连接功能大约2分钟(我猜它是4次ping失败的时间),对我的情况来说太长了,我可以吗?调整它以及如何?

  2. 当我离开此页面(关闭标签页或跳转到其他页面)时,一段时间后会出现一些错误消息,如下所示:

  3. [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;收到游戏信息时仍然会尝试通知此页面,那么我该如何避免此错误?

1 个答案:

答案 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  
        ...
    });
}