如果不主动关闭线程的话,系统不会自动关闭的,除非当前进程挂掉了,操作系统把占用的线程回收了才会关闭。
请问是不是就是说 我如果不主动调用close 方法netty就不会主动关闭客户端和服务器的链接,哪怕客户端12小时才给服务器发送一次心跳;也不需要向io那样写一个死循环一直保持链接
@哎哟,不错哦: 线程保持这个句柄不关闭,并不是线程运行的条件。关闭线程句柄只是释放句柄资源,新开启线程后,如果不再利用其句柄,应该关闭句柄,释放系统资源。关闭线程句柄和线程的结束与否没有关系。
@对象不是老婆: 大佬 不太明白;我现在的需求是当客户端和服务器建立链接以后,客户端可能12个小时才给服务器发送一次心跳,我在网上找的资料是将ChannelOption.SO_KEEPALIVE设置为true;但是这个会断开
@哎哟,不错哦: 你设置时长没有,默认的是两小时,到时就断开连接。
@对象不是老婆: 这个没有设置;请问这个如何设置呢
@哎哟,不错哦: 你不是有一个心跳检测处理类,
服务器的设置为:
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
@对象不是老婆: 大佬,这样的话是不是没过几秒 客户端就必须给服务器发送一个消息
@哎哟,不错哦: 大佬不是,也是菜鸟一枚,你可以设置啊!你设置了5秒检测,那么客服端就必须在4秒内发数据过来,你可以改成12小时也可以自己换算成秒就是了。个人觉得不要设置太长的时长。
@对象不是老婆: 请问如果加的话是在那个地方加
@哎哟,不错哦: 你这个是什么类,是你自己建的吗?如果类没错,就在:
protected void initChannel(SocketChannel socketChannel)thows Exception{ ChannelPipeline p = socketChannel.pipeline(); p.addLast(new IdleStateHandler(5, 0, 0,TimeUnit.SECONDS)); } 这个重写方法是初始化执行的语句,最先执行。
@对象不是老婆: 请问使用netty进行udp开发时间是不是也是这样设置的
@哎哟,不错哦: udp:通常视频、音频等可靠性要求不高的数据传输一般会使用UDP,
(1)UDP传送数据前并不与对方建立连接,即UDP是无连接的。在传输数据前,发送方和接收方相互交换信息使双方同步;
(2)UDP对接收到的数据报不发送确认信号,发送端不知道数据是否被正确接收,也不会重发数据;
(3)UDP传送数据比TCP快速,系统开销也少:UDP比较简单,UDP头包含了源端口、目的端口、消息长度和校验和等很少的字节。由于UDP比TCP简单、灵活,常用于可靠性要求不高的数据传输,如视频、图片以及简单文件传输系统(TFTP)等。TCP则适用于可靠性要求很高但实时性要求不高的应用,如文件传输协议FTP、超文本传输协议HTTP、简单邮件传输协议SMTP等。
看情况的, 如果操作系统底层中断了, 网络中断了, 链接还是会断开的。 应用层面无法保证,不要保有侥幸心理。如果是自己练手,当我没说
不是练手的,请问大佬有没办法 让客户端和服务器的状态一直是链接的,不会中断,网络问题不需要考虑