之前主动关闭nettyserver是在serverhandler中通过ctx.channel().parent().close();直接关闭serversocketchannel,触发关闭事件,使得sync()不在阻塞线程。
另外的方法就是设置一个静态的关闭服务器方法,在外部调用。方法的具体代码之前也有提及,这篇主要是进行测试。
主要是服务端测试:

public class TestServer {Remote_game_interface Tx_net = new Player_info_find(); // 接口实现类,也就是服务NettyRpcServer rpcServer = new NettyRpcServer("127.0.0.1", 9999); //服务器Runnable connect = new Runnable() {@Overridepublic void run() {rpcServer.serviceRegister(Tx_net);rpcServer.connect();}};Runnable close = new Runnable() {@Overridepublic void run() {try {Thread.sleep(30000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("开始断开服务器");NettyRpcServer.closeServer();}};public static void main(String[] args) throws InterruptedException {TestServer test = new TestServer();Thread close = new Thread(test.close);close.start();Thread connect = new Thread(test.connect);connect.start();}}

主要思路就是创建两个线程,一个是连接服务器线程,逻辑和之前的测试连接思路一样;另外一个是关闭线程,直接调用暴露出来的强制关闭服务器方法。需要注意的是在关闭线程close前面加一个延时30s,防止还未连接就关闭,达不到测试效果。同时sync()阻塞的是connect线程,因此在main函数中connect和close的启动顺序无所谓。
PPS:
之前有一个弯路,想要把new出来的rpcServer对象同步,也就是synchronized (rpcserver),实现两个线程对该对象进行操作,这样强制关闭的方法不需要是静态的了。使用同步代码块需要在close线程中获取rpcserver的锁。然后调用notify()方法来唤醒connect线程。但是由于阻塞的问题,close线程拿不到锁(sync()底层源码来看锁的谁嘛?),因此也无法对connect线程唤醒。
问题就在sync()锁的谁呢?除了netty自带的close方法还有什么方法来唤醒阻塞线程?可能要抠底层了⑧。。。下面是不成功的代码

public class TestServer {Remote_game_interface Tx_net = new Player_info_find(); // 接口实现类,也就是服务NettyRpcServer rpcServer = new NettyRpcServer("127.0.0.1", 9999); //服务器Runnable connect = new Runnable() {@Overridepublic void run() {synchronized (rpcServer){rpcServer.serviceRegister(Tx_net);rpcServer.connect();}}};Runnable close = new Runnable() {@Overridepublic void run() {synchronized (rpcServer){try {Thread.sleep(30000);} catch (InterruptedException e) {e.printStackTrace();}System.out.println("开始断开服务器");rpcServer.notify();}}};public static void main(String[] args) throws InterruptedException {TestServer test = new TestServer();Thread connect = new Thread(test.connect);connect.start();Thread close = new Thread(test.close);close.start();}}

ps:Netty服务端主动关闭问题相关推荐

  1. netty 服务端主动向客户端发信息

    在使用netty时,有时候会和客户端保持长链接,这个时候服务端既可以接受客户端消息也可以主动发送消息给服务端.我们只需要在服务端保存客户端的ChannelHandlerContext对象,必要的时候通 ...

  2. springboot实现SSE服务端主动向客户端推送数据,java服务端向客户端推送数据,kotlin模拟客户端向服务端推送数据

    SSE服务端推送 服务器向浏览器推送信息,除了 WebSocket,还有一种方法:Server-Sent Events(以下简称 SSE).本文介绍它的用法. 在很多业务场景中,会涉及到服务端向客户端 ...

  3. netty tcp服务端主动断开客户端_【Netty】服务端和客户端

    欢迎关注公众号:[爱编程] 如果有需要后台回复2019赠送1T的学习资料哦!! 本文是基于Netty4.1.36进行分析 服务端 Netty服务端的启动代码基本都是如下: private void s ...

  4. 图说Netty服务端启动过程

    来源:逐码 我们知道Netty是一个基于JDK的nio实现的网络编程框架,那Netty的服务端是怎么启动的呢,包括他是何时register 的,何时 bind 端口的,以及何时开始读取网络中的数据的? ...

  5. 二、Netty服务端/客户端启动整体流程

    一.综述 Netty 的整体流程相对来说还是比较复杂的,初学者往往会被绕晕.所以这里总结了一下整体的流程,从而对 Netty 的整体服务流程有一个大致的了解.从功能上,流程可以分为服务启动.建立连接. ...

  6. java spring 服务器关闭连接_java springboot websocket 服务 服务器主动关闭连接 导致 抛出java.io.EOFException异常...

    遇到这个问题不要慌,去查查众说纷纭.那我就在这里总结一下吧 存在此问题的有以下几种情况 1.ws连接不稳定经常断线: 答: 1)可能是客户和服务器之间的网络问题 2)可能是服务端内存不够用导致线程被异 ...

  7. flux服务器推消息,服务端主动推送数据,除了 WebSocket 你还能想到啥?

    原标题:服务端主动推送数据,除了 WebSocket 你还能想到啥? 来自公众号: 江南一点雨 在 上篇文章 中,松哥和大家分享了 WebFlux 的基本用法,小伙伴们已经了解到使用 WebFlux ...

  8. http协议与https协议+UDP协议和TCP协议+WebSocket协议下服务端主动去发送信息+对称加密与非对称加密+get和post请求方式区别详解+浏览器内核以及jsj解析引擎

    TCP和UDP协议是TCP/IP协议的核心. 在TCP/IP网络体系结构中,TCP(传输控制协议,Transport Control Protocol).UDP(用户数据报协议,User Data P ...

  9. Qt 多线程TCP服务端一键关闭所有客户端

    Qt 多线程TCP服务端一键关闭所有客户端 任务描述: 实现多线程TCP服务端一键关闭所有客户端的连接. 解决过程: 1.Qt的服务端提供了close的功能,但是只用来不响应新接入的客户端. 手册中是 ...

最新文章

  1. 2009江民中国大陆地区计算机网络安全报告
  2. 一句话回复:关于'SqlMembershipProvider' requires a database schema compatible with schema version '1'...
  3. JDK、Spring、Dubbo SPI 原理介绍
  4. Oracle数据库使用Analyze提升sql性能
  5. 一个项目的整个测试流程
  6. 墨迹天气语音包_广州天气|冷空气到货,任性吃火锅的理由又有了
  7. Android单元测试读写文件,xml-如何为android单元测试提供数据文件
  8. HTML5等先关。。。
  9. SMTP 发送内嵌图片 邮件
  10. 如何破解HIT的孤岛效应,一起关于患者主索引的案例分享
  11. 微信小程序服务器端语言,微信小程序后端用什么语言好
  12. 寒门如何出贵子(摘抄)
  13. 【XiunoBBS】开源简易论坛学习
  14. Questa CDC(安全性测试)
  15. 【面经】字节跳动C++社招5轮面试题分享
  16. Java 实现数据库数据 导入 导出成Excel文档的功能
  17. Android系统源代码情景分析-0714学习
  18. 短信网关 php,php使用ICQ网关发送手机短信_PHP教程
  19. ios屏幕录制60帧_探索iOS屏幕帧缓冲区–内核反转实验
  20. 用switch语句输入英文单词的星期几会显示中午的星期几

热门文章

  1. cmip6数据处理、统计降尺度、动力降尺度、及应用时的各种问题
  2. 刷脸支付实现刷脸即会员的新亮点
  3. Jmeter模拟不同带宽
  4. android摇一摇功能音效与振动附加微信音效大全下载
  5. C/C++以某符号分割字符串
  6. 基于.net平台下大型分布式HIS系统之药房药库系统-石曼迪-专题视频课程
  7. APISpace 星座配对API
  8. Unity 开发MR HoloLens1或2 的发布问题
  9. 米拓网站bug httpd.exe疯狂占用CPU
  10. 说一说显卡坏了的一些症状