Codenameone 无法关闭代号为1的WebSocket连接?
提供了有助于保持连接活动的方法Codenameone 无法关闭代号为1的WebSocket连接?,codenameone,Codenameone,提供了有助于保持连接活动的方法autoReconnect(int-time)。。。但缺点是我无法关闭连接。我的代码中是否有我可以修复的错误,或者是库中的错误 在服务器端,有一个计时器,它每秒向id为“1234”的客户端发送一条WebSocket文本消息。这只是一个测试,我主要是从代码名为One Academy的服务器上复制的代码,所以我认为它是正确的 在客户端,我编写了以下测试用例: String uniqueId = "1234"; Form hi = new
autoReconnect(int-time)
。。。但缺点是我无法关闭连接。我的代码中是否有我可以修复的错误,或者是库中的错误
在服务器端,有一个计时器,它每秒向id为“1234”的客户端发送一条WebSocket文本消息。这只是一个测试,我主要是从代码名为One Academy的服务器上复制的代码,所以我认为它是正确的
在客户端,我编写了以下测试用例:
String uniqueId = "1234";
Form hi = new Form("WebSocket Test", BoxLayout.y());
hi.show();
final WebSocket sock = new WebSocket("ws://localhost:8080/wsMsg") {
@Override
protected void onOpen() {
Log.p("WebSocket onOpen - Sending uniqueId: " + uniqueId);
hi.add("WebSocket onOpen - Sending uniqueId: " + uniqueId);
hi.animateLayout(400);
send(uniqueId);
}
@Override
protected void onClose(int statusCode, String reason) {
Log.p("WebSocket onClose");
hi.add("WebSocket onClose");
hi.animateLayout(400);
}
@Override
protected void onMessage(String message) {
Log.p("WebSocket onMessage: " + message);
hi.add(new SpanLabel("WebSocket onMessage: " + message));
hi.animateLayout(400);
}
@Override
protected void onMessage(byte[] message) {
Log.p("WebSocket onMessage (byte[]): " + message.toString());
}
@Override
protected void onError(Exception ex) {
Log.e(ex);
hi.add(new SpanLabel("WebSocket onError:\n" + ex.getMessage()));
}
};
sock.connect();
sock.autoReconnect(5000);
UITimer.timer(5000, false, hi, () -> {
sock.close();
});
输出为:
如您所见,关闭WebSocket连接后,
autoReconnect
将其重新打开。预期的行为是,autoReconnect
必须仅在出现网络错误时重新连接,而不是在显式调用close
时重新连接。写完这个问题后,我在真实设备(Android和iOS)上测试了相同的代码,得到了它们之间的不同行为。这让我确信这是库中的一个bug,所以我提出了这个问题:这是有道理的,史蒂夫整个星期都在忙着跟踪一个内存崩溃(最终解决了),所以希望他能在周末恢复到足够的状态来看看这个问题。如果你不确定在写了这个问题之后,我在真实设备(Android和iOS)上测试了相同的代码,我得到了它们之间不同的行为。这让我确信这是库中的一个bug,所以我提出了这个问题:这是有道理的,史蒂夫整个星期都在忙着跟踪一个内存崩溃(最终解决了),所以希望他能在周末恢复到足够的状态来看看这个问题。如果你不确定,请告诉我们