首页 新闻 会员 周边 捐助

netty小白的一个问题

0
悬赏园豆:10 [已解决问题] 解决于 2018-04-03 18:53

请问netty客户端和服务端的链接 是不是不掉用close方法就一直保持着链接状态

哎哟,不错哦的主页 哎哟,不错哦 | 初学一级 | 园豆:184
提问于:2018-04-03 14:54
< >
分享
最佳答案
0

如果不主动关闭线程的话,系统不会自动关闭的,除非当前进程挂掉了,操作系统把占用的线程回收了才会关闭。

收获园豆:10
对象不是老婆 | 菜鸟二级 |园豆:316 | 2018-04-03 15:37

请问是不是就是说 我如果不主动调用close 方法netty就不会主动关闭客户端和服务器的链接,哪怕客户端12小时才给服务器发送一次心跳;也不需要向io那样写一个死循环一直保持链接

哎哟,不错哦 | 园豆:184 (初学一级) | 2018-04-03 15:59

@哎哟,不错哦: 线程保持这个句柄不关闭,并不是线程运行的条件。关闭线程句柄只是释放句柄资源,新开启线程后,如果不再利用其句柄,应该关闭句柄,释放系统资源。关闭线程句柄和线程的结束与否没有关系。

对象不是老婆 | 园豆:316 (菜鸟二级) | 2018-04-03 16:14

@对象不是老婆: 大佬 不太明白;我现在的需求是当客户端和服务器建立链接以后,客户端可能12个小时才给服务器发送一次心跳,我在网上找的资料是将ChannelOption.SO_KEEPALIVE设置为true;但是这个会断开

哎哟,不错哦 | 园豆:184 (初学一级) | 2018-04-03 16:28

@哎哟,不错哦: 你设置时长没有,默认的是两小时,到时就断开连接。

对象不是老婆 | 园豆:316 (菜鸟二级) | 2018-04-03 16:33

@对象不是老婆: 这个没有设置;请问这个如何设置呢

哎哟,不错哦 | 园豆:184 (初学一级) | 2018-04-03 16:41

@哎哟,不错哦: 你不是有一个心跳检测处理类,

服务器的设置为:

p.addLast(new IdleStateHandler(5, 0, 0,TimeUnit.SECONDS));表示每隔五秒就去检测是否有数据传过来。

客服端的设置为

p.addLast("ping",new IdleStateHandler(0,4,0,TimeUnit.SECONDS));必须要小于服务器设置的时间,表示四秒传输数据出去。

 给你两篇文章,你可以自己去参考一下:

https://segmentfault.com/a/1190000006931568

https://blog.csdn.net/z69183787/article/details/52980768

 

对象不是老婆 | 园豆:316 (菜鸟二级) | 2018-04-03 16:55

@对象不是老婆: 大佬,这样的话是不是没过几秒 客户端就必须给服务器发送一个消息

哎哟,不错哦 | 园豆:184 (初学一级) | 2018-04-03 17:08

@哎哟,不错哦: 大佬不是,也是菜鸟一枚,你可以设置啊!你设置了5秒检测,那么客服端就必须在4秒内发数据过来,你可以改成12小时也可以自己换算成秒就是了。个人觉得不要设置太长的时长。

对象不是老婆 | 园豆:316 (菜鸟二级) | 2018-04-03 17:13

@对象不是老婆: 请问如果加的话是在那个地方加 

哎哟,不错哦 | 园豆:184 (初学一级) | 2018-04-03 17:16

@哎哟,不错哦: 你这个是什么类,是你自己建的吗?如果类没错,就在:

protected void initChannel(SocketChannel socketChannel)thows Exception{
    ChannelPipeline p = socketChannel.pipeline();
    p.addLast(new IdleStateHandler(5, 0, 0,TimeUnit.SECONDS));

}   这个重写方法是初始化执行的语句,最先执行。 
对象不是老婆 | 园豆:316 (菜鸟二级) | 2018-04-03 17:30

@对象不是老婆: 请问使用netty进行udp开发时间是不是也是这样设置的

哎哟,不错哦 | 园豆:184 (初学一级) | 2018-04-03 18:54

@哎哟,不错哦: udp:通常视频、音频等可靠性要求不高的数据传输一般会使用UDP,

(1)UDP传送数据前并不与对方建立连接,即UDP是无连接的。在传输数据前,发送方和接收方相互交换信息使双方同步;

(2)UDP对接收到的数据报不发送确认信号,发送端不知道数据是否被正确接收,也不会重发数据;

(3)UDP传送数据比TCP快速,系统开销也少:UDP比较简单,UDP头包含了源端口、目的端口、消息长度和校验和等很少的字节。由于UDP比TCP简单、灵活,常用于可靠性要求不高的数据传输,如视频、图片以及简单文件传输系统(TFTP)等。TCP则适用于可靠性要求很高但实时性要求不高的应用,如文件传输协议FTP、超文本传输协议HTTP、简单邮件传输协议SMTP等。

对象不是老婆 | 园豆:316 (菜鸟二级) | 2018-04-04 08:50
其他回答(1)
0

看情况的, 如果操作系统底层中断了, 网络中断了, 链接还是会断开的。 应用层面无法保证,不要保有侥幸心理。如果是自己练手,当我没说

风云力 | 园豆:541 (小虾三级) | 2018-04-03 16:26

不是练手的,请问大佬有没办法 让客户端和服务器的状态一直是链接的,不会中断,网络问题不需要考虑

支持(0) 反对(0) 哎哟,不错哦 | 园豆:184 (初学一级) | 2018-04-03 16:32
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册