繁体   English   中英

Java Kryonet客户端断开连接

[英]Java Kryonet Client Disconnect

我对客户端断开的kryonet有问题。 谁能帮助我解决这个问题?

使用kryonet库,为了使客户端保持连接状态,它需要发送和接收KeepAlive数据包。 客户端线程将自动处理此问题。 但是,如果我的客户端执行繁重的工作(注:在另一个线程中),则似乎阻止了客户端线程执行此操作。

该问题出现在读取大数据库表时,需要花费一些时间从表中选择一些列(每Gega的大小)

但尝试在服务器发送任何内容以启动任务后在客户端创建一个很大的列表,以尽可能简化问题

经过大量的查找和对问题原因的期望; 我尝试

  1. 不同的超时阈值
  2. 不同版本的Kryo 2.23和2.20
  3. 使用TCP和UPD连接(注意:我同时在服务器和客户端中连接)

如果您收到任何对象,则在这里是客户端代码。

  @Override
    public void received(Connection connection, Object object) {
        if (object instanceof String) {
            new Thread() {
                @Override
                public void run() {
                    final int RECORD_COUNT = 99999999;
                    final String RECORD = "Help I am trapped in a fortune cookie factory\n";
                    List<String> records = new ArrayList<String>(RECORD_COUNT);
                    for (long i = 0; i < RECORD_COUNT * 4; i++) {
                        records.add(RECORD);
                    }
                }
            }.start();
        }
    }

客户端日志:

在一些KeepAlive消息之后,它给出两种类型的消息(连接被中止)或(连接超时)

00:24 DEBUG: [kryo] Write: KeepAlive
00:28 DEBUG: [kryo] Read: KeepAlive
00:37 DEBUG: [kryo] Write: KeepAlive
00:37 DEBUG: [kryonet] Connection 7 update: An established connection was aborted by the software in your host machine

要么

00:35 DEBUG: [kryo] Read: KeepAlive
00:41 DEBUG: [kryo] Write: KeepAlive
00:50 DEBUG: [kryonet] Connection 8 timed out.

服务器日志:

94:10 DEBUG: [kryo] Write: KeepAlive
94:11 DEBUG: [kryonet] Connection 7 timed out.
94:11  INFO: [kryonet] Connection 7 disconnected.

我认为您不是在单独的线程中启动客户端。

“从r122开始,客户端更新线程被设置为守护程序线程,导致子进程在完成初始化后立即关闭。”解决方案是“也许您可以使用它?new Thread(client).start();”。 。

所以你应该代替

client.start();

你应该用

new Thread(client).start();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM