- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我正在使用 AndroidAsync koush 低级网络协议(protocol)库。我正在使用 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 秒内没有收到断开连接消息。我们的服务器正在使用这些库:
有没有办法加快我这边的速度?我可以将某个套接字级别的超时设置为较低的值,以便我的服务器人员更快地收到断开连接消息吗?
最佳答案
因为 AndroidAsync没有实现 closing handshake这是 RFC 6455 所要求的(有关详细信息,请参阅 this),您的 WebSocket 服务器无法检测到断开连接在 WebSocket 的上下文中。因此,服务器必须等待 ETIMEDOUT
在 TCP/IP 的上下文中 以检测断开连接。
使用符合 RFC 6455 并正确实现关闭握手的 WebSocket 库。
关于android - 为什么 AndroidAsync 断开连接时间这么长?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34363183/
我正在使用 AndroidAsync koush 低级网络协议(protocol)库。我正在使用 WebSocket 连接到服务器。我能够连接、发送/接收消息和断开连接。我的断开连接时间很长。服务器平
我正在使用这个 AndroidSync koush 的库,用于创建 websocket(服务器/客户端)并在两个 android 设备之间传输数据。这两个设备通过 wifi 连接(一个是 Wifi A
我正在尝试更改默认的 AndroidAsync websocket 初始连接超时 30 秒。这是具有默认超时的工作版本: AsyncHttpClient.getDefaultInstance().we
我已经在 Android 上使用 socket.io 几天了。截至目前,我正在使用 Koush 的 AndroidAsync。当我尝试连接到本地 socket.io 服务器 (http://192.1
我尝试使用 AndroidAsync 库。这是一个代码示例: AsyncHttpClient.getDefaultInstance() .websocket(url,
我正在编写一些小型聊天应用程序,并且我正在使用 AndroidAsync 在我的应用程序中获取 WebSocket 客户端功能。所以,问题是每当我尝试从 WebSocket.StringCallbac
我正在寻找有关如何使用 AndroidAsync 库创建简单套接字或 DatagramSocket 的示例。 git repo 中的示例、测试和主页上的示例似乎并未涵盖此用例。我看到了 SocketC
我将 Koush 的 AndroidAsync 用于 WebSocket 客户端。我的代码遵循 https://github.com/koush/AndroidAsync 处的示例和作品。 (下面复制
我是一名优秀的程序员,十分优秀!