在使用netty时,有时候会和客户端保持长链接,这个时候服务端既可以接受客户端消息也可以主动发送消息给服务端。我们只需要在服务端保存客户端的ChannelHandlerContext对象,必要的时候通过write和flush方法即可实现服务端和客户端的通信。以下为handler的代码,其他代码和普通的netty一样。

public class AcceptServerChannelHandler extends ChannelInboundHandlerAdapter  {public static Map<String, ChannelHandlerContext> ctxMap = new ConcurrentHashMap<String, ChannelHandlerContext>(16);@Overridepublic void channelRead(ChannelHandlerContext ctx, Object msg) throws Exception {ctx.write("test");ctxMap.put(keyId,ctx);ctx.flush();}@Overridepublic void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) throws Exception {ctx.flush();ctx.close();}@Overridepublic void channelActive(ChannelHandlerContext ctx) throws Exception {super.channelActive(ctx);}/*** 服务端接收客户端发送过来的数据结束之后调用*/@Overridepublic void channelReadComplete(ChannelHandlerContext ctx) throws Exception {super.channelReadComplete(ctx);}/*** 客户端主动断开服务端的连接* @param ctx* @throws Exception*/@Overridepublic void channelInactive(ChannelHandlerContext ctx) throws Exception {removeChannelMap(ctx);super.channelInactive(ctx);}/*** 移除已经失效的链接* @param ctx*/private void removeChannelMap(ChannelHandlerContext ctx) {for( String key :ctxMap.keySet()){if(ctxMap.get(key)!=null && ctxMap.get(key).equals(ctx)){ctxMap.remove(key);}}}public void sendMessage(String keyid){ChannelHandlerContext ctx = ctxMap.get(keyid);ctx.write("test");ctx.flush();//writeAndFlush在这里没生效,没找到原因}
}

netty 服务端主动向客户端发信息相关推荐

  1. ssm配置socket_ssm框架中集成websocket实现服务端主动向客户端发送消息

    找了很多配置文档及实例说明,也还是没能成功,最终在csdn博客中发现了基于stomp的消息推送的文章, 下面整理自csdn博客,https://blog.csdn.net/u013627689/art ...

  2. netty tcp服务端主动断开客户端_「Netty核心技术」6-ChannelPipeline源码

    ChannelPipeline是Channelhandler的容器,它负责ChannelHandler的管理和事件拦截与调度. 土话: ChannelPipeline就是用来管理Channelhand ...

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

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

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

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

  5. ps:Netty服务端主动关闭问题

    之前主动关闭nettyserver是在serverhandler中通过ctx.channel().parent().close();直接关闭serversocketchannel,触发关闭事件,使得s ...

  6. php守护进程内存溢出,$serv-close($fd); 服务端主动断开客户端有问题!

    'core' => array( 'reactor_num' => 2, // 线程数. 一般设置为CPU核数的1-4倍 'worker_num' => 16, // 工作进程数量. ...

  7. 服务器向客户机发信息,服务器如何主动给客户端发消息

    服务器如何主动给客户端发消息 内容精选 换一换 当出现以下问题时,可以参考本章节排查解决.可以直接访问后端业务,但是无法通过负载均衡访问后端业务.通过私网IP可以访问负载均衡,但是公网IP无法访问负载 ...

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

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

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

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

最新文章

  1. C/C++使用keybd_event模拟键盘按键
  2. matlab gui打开fig文件,求助gui打开word文件及打开fig格式图片
  3. Linux (redhat 6.5)服务器上安装Webmin
  4. html制作任务计划列表网页,添加计划任务的脚本
  5. 重磅!13所985高校,成立大学联盟!
  6. java求最后一位不为0的数字_【Java】 剑指offer(62) 圆圈中最后剩下的数字
  7. [20个项目学会BBC micro:bit编程] 15-超声波测距实验
  8. 3.24学习记录(下午)
  9. 推荐系统之基于用户行为数据的协同过滤(Collaborative Filtering)
  10. 解决微信浏览器不能自动播放视频
  11. 集合源码解析Map容器Gc回收算法
  12. Scene Graph Generation by Iterative Message Passing
  13. liu系统的混沌特性及其matlab仿真,Liu系统的混沌特性及其Matlab仿真
  14. ibm tivoli_带有Tivoli Access Manager的SAP NetWeaver Application Server ABAP的单点登录
  15. 【独立站运营】什么是营销转化率?如何提升转化率?
  16. 思维为何会越来越原地踏步No.209
  17. C++基础知识 - 多重继承的二义性问题
  18. 实施化化工厂人员定位系统势在必行,你不知道的化化工厂人员定位
  19. 软技能—代码之外的生存指南
  20. JS 怎么控制 checkbox 选中的问题

热门文章

  1. 弹性云服务器由虚拟私有云组成,弹性云服务器组成
  2. [4G5G专题-64]:RF层 - 无线电磁波的基本原理与传输特性
  3. NAACL'22 Findings | 社交媒体上的抱怨强度分析
  4. 区块链当前的发展现状
  5. 【js】三种JS截取字符串方法
  6. 云队友丨五大思维模式,决定你的人生能走多远
  7. [Linux]线程概念_线程控制(线程与进程的区别与联系 | 线程创建 | 线程等待 | 线程终止 | 线程分离 | LWP)
  8. 如何学习一门计算机语言
  9. C++ handle classes
  10. Hudi同步Hive表报“HoodieException : Got runtime exception when hive syncing”错误的解决方法