当前位置: 首页 > 知识库问答 >
问题:

Java Kryonet客户端断开

蒋奕
2023-03-14

我对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();
        }
    }

客户端日志:

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.

共有1个答案

陆翰藻
2023-03-14

我认为您没有在一个单独的线程中启动客户端

“从r122开始,客户端更新线程被制成后台进程线程,导致子进程一完成初始化就关闭。”,解决方案是“Maybe you could use this?new Thread(client).start();”。

所以你应该代替

client.start();
new Thread(client).start();
 类似资料:
  • SOFARPC 已集成 Hystrix 提供熔断能力,当前提供第一个预览版。关于 Hystrix 的更多介绍可以参考 Hystrix 官方文档,Hystrix 集成能力主要由 ScienJus 提供,感谢贡献。 接下来介绍一下如何体验 Hystrix 带来的熔断能力,以下示例使用 SOFARPC 5.5.0 版本,更多 Hystrix 的配置及 SOFABoot 集成使用方式将在后续版本提供,敬请

  • Netflix的创造了一个调用的库Hystrix实现了断路器图案。在微服务架构中,通常有多层服务调用。 图1.微服务图 较低级别的服务中的服务故障可能导致用户级联故障。当对特定服务的呼叫达到一定阈值时(Hystrix中的默认值为5秒内的20次故障),电路打开,不进行通话。在错误和开路的情况下,开发人员可以提供后备。 图2. Hystrix回退防止级联故障 开放式电路会停止级联故障,并允许不必要的或

  • null 当MQTT代理变得不可用时,Paho MQTT客户机不能帮助我保证这些QoS2级别的消息将被重新传递,这是正确的说法吗? 因此,我如何区分以下情况,即Client.Publish导致了一个MqttException,其中Paho没有将消息持久化。 下面是它在飞行中坚持的地方 null 连接丢失(32109):PAHO保存消息 客户端当前正在断开连接(32102):PAHO丢失消息 等待服

  • 编辑:我设法把我的问题简化成一些非常简单的事情: 这段代码没问题: 这段代码断开了客户端的连接!:

  • 我正在使用C#window应用程序表单对TCP多线程服务器进行工作,我正在尝试检测客户端的机器是否关闭并断开与服务器的连接。看了一些帖子,有了一些想法: 如何确定tcp是否连接? 我的代码如下: 多谢帮忙。

  • 我想在一些计算机之间建立点对点连接,这样用户就可以在没有外部服务器的情况下聊天和交换文件。我最初的想法如下: 我在服务器上制作了一个中央服务器插座,所有应用程序都可以连接到该插座。此ServerSocket跟踪已连接的套接字(客户端),并将新连接的客户端的IP和端口提供给所有其他客户端。每个客户端都会创建一个新的ServerSocket,所有客户端都可以连接到它。 换句话说:每个客户端都有一个Se