当前位置:  开发笔记 > 运维 > 正文

为什么AndroidAsync断开时间这么久?

如何解决《为什么AndroidAsync断开时间这么久?》经验,为你挑选了1个好方法。

我正在使用AndroidAsync koush低级网络协议库.我正在使用WebSocket连接到服务器.我能够连接,发送/接收消息和断开连接.我的断开时间很长.服务器平均没有检测到断开连接59秒.

为了重现这个问题,我连接了WebSocket,授权并每隔10秒开始ping一次.然后我打开飞机模式,我的网络连接下降.此时调用setClosedCallback方法.以下是我记录此消息的方式:

private WebSocket mConnection;

private WebSocketConnectCallback mSocketCallback = new WebSocketConnectCallback() {
    @Override
    public void onCompleted(Exception ex, WebSocket webSocket) {
    ...
            webSocket.setClosedCallback(new CompletedCallback() {
            @Override
            public void onCompleted(Exception ex) {
                Log.d("websocket", "WebSocket closed");
                if (ex != null && ex.getMessage() != null) {
                    Log.e("websocket", "WebSocket closed exception: " + ex.getMessage());
                }
                disconnect();
            }
        });
    }
};

private void disconnect() {
    mPingHandler.removeCallbacks(pingRunnable);
    if (mConnection != null) {
        mConnection.close();
        mConnection = null;
    }
}

这是让我知道WebSocket已关闭的日志消息:

WebSocket关闭异常:recvfrom失败:ETIMEDOUT(连接超时)

但是,我们的服务器大约59秒没有收到断开连接消息.我们的服务器正在使用这些库:

GEVENT == 1.0

GEVENT-的WebSocket == 0.9.2

greenlet == 0.4.2

有没有办法加快我的速度?是否有一个套接字级别超时我可以设置为较低的值,以便我的服务器人员更快地获得断开连接消息?



1> Takahiko Kaw..:

由于AndroidAsync没有实现关闭握手这是由需要RFC 6455(见本的详细信息),您的WebSocket服务器无法检测断线中的WebSocket的情况下.因此,服务器必须ETIMEDOUT 在TCP/IP的上下文中等待检测断开连接.

使用符合RFC 6455的WebSocket库并正确实现关闭握手.

推荐阅读
yzh148448
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有