我对kryonet客户端断开有问题。有谁能帮我弄清楚这个问题的根源是什么吗?
利用kryonet库,客户端需要发送和接收KeepAlive数据包才能保持连接。客户端线程将自动处理此操作。但是如果我的客户端做了一个繁重的工作(注意:在另一个线程中),它似乎会阻止客户端线程做这件事。
问题出现在读取大的数据库表时,从表中选择一些列(每个Gega的大小)需要花费时间
这里是客户端代码,如果收到任何对象,请在另一个线程中执行:
@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.
我认为您没有在一个单独的线程中启动客户端。
“从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