- 前言:作为一个刚踏入职场的实习生 , 我很幸运参加了某个政府项目 , 并且在项目中负责一个核心模块功能的开发 , 而不是从头到尾对数据库的crud 。虽然我一直心里抱怨我的工作范围根本就不是实习生干的活 , 因为没有前辈带我、入职就开始改bug 。但在这样的环境下我却学到了很多东西 , 即便老板有压榨我的嫌疑 , 却给了我如此好的历练机会(但工资方面真的很亏QAQ) , 毕竟实习过后跳槽简历上还有亮点 。
- 背景:在不同的网络环境、不同的开发语言组成的闭环系统中 , 多个模块之间要实时获取硬件设备的状态 , 并以xml报文的格式相互传递 。在必要的时候解析这个报文获取其中的关键信息完成相应的动作 , 最后直观地把信息显示给前端用户 。如此一来就是涉及到了跨终端通信 , 并且有的功能模块既要充当客户端分发指令 , 还要作为客户端从别处获取信息 。很不巧的是 , 我负责的模块正是充当消息中转站的作用 , 为了解决这个需求我才有了了解这种机制的机会 。
- 正文:由于涉及到不同模块之间的通信 , 其中又包含了web前端 , 为了保持通信协议的一致性项目采用了ws协议 , 即websocket 。
HttpObjectAggregator$AggregatedFullHttpRequest(decodeResult: success, version: HTTP/1.1, content: CompositeByteBuf(ridx: 0, widx: 0, cap: 0, components=0))GET / HTTP/1.1Host: localhost:8888Connection: UpgradePragma: no-cacheCache-Control: no-cacheUser-Agent: Mozilla/5.0 (windows NT 10.0; Win64; x64) AppleWebKit/537.36 (Khtml, like Gecko) Chrome/90.0.4430.212 Safari/537.36Upgrade: websocketOrigin: file://Sec-WebSocket-Version: 13Accept-Encoding: gzip, deflate, brAccept-Language: zh-CN,zh;q=0.9Sec-WebSocket-Key: RLnvly29Zl3sJQOfGFjO9w==Sec-WebSocket-Extensions: permessage-deflate; client_max_window_bitscontent-length: 0websocket建立时是以http协议握手 , 当建立连接之后就不需要http之间双向通信 。协议深层次的东西以我目前的能力是无法理解的 , 将来有机会我会再回过头来分析底层协议 。那么接下来就进入我们的主题 。引入maven依赖(结合项目实际情况而定):
<dependency><groupId>io.netty</groupId><artifactId>netty-all</artifactId><version>5.0.0.Alpha2</version></dependency>我们的需求自己既是服务端向其他模块推送消息 , 又是客户端从别处获取消息后推送其他模块 。那么我们要在自己项目中集成netty客户端和服务端 , 因为客户端无法给多个连接推送消息 。这里我主要介绍SimpleChannelInboundHandler类的三个方法:
推荐阅读
- 基于netty的构建一个群聊系统
- 核电站|不再100%进口!中国全球首次实现商用堆生产碳-14同位素
- Wps文字如何实现一键对齐?
- Python实现用手机监控远程控制电脑
- C++实现线程池
- 一文搞懂GoLang定时器实现原理
- 教你一段代码实现批量重命名
- 华为|卖车挑战30万辆!华为董事长:目标已很难实现 华为还是新手
- 域环境实现打印机共享
- 如何用python实现自动化办公
