WebSocket初体验(Netty)
来源:互联网 发布:windows字体库样式 编辑:程序博客网 时间:2024/06/02 05:03
WebSocket初体验(Netty)
最近实在有点闲,鉴于实在拿不出”没时间”作为理由让自己休息休息,另外Maybe人生将踏入一个新的阶段,决定开始写博客,总结下之前做过的东西,分享的同时加深一下记忆.
- 需求场景:
项目环境:Linux+Java+SpringMVC+JavaScript
需求:项目为B/S架构,现需求在用户A进行操作时将A的操作信息同步给用户B
问题:由于项目是B/S架构,使用http协议通信,基于http协议,服务器无法直接向客户端推送消息 - 解决方案:
选型:综合考虑,可行方案基本在Ajax轮询及WebSocket间徘徊,考虑到性能问题以及可以炒一下H5的冷饭,所以选择了WebSocket
最终技术选型为: Netty 3.10.6.Final(由于看到相关资料谈及Netty的新版本不太稳定,所以在选型时选择了相对稳定的3.10.6.Final版本)
Netty介绍及官网: [ 介绍 ] [ 官网 ]
选型时出于性能考虑,参考了以下文档:
http://blog.csdn.net/langzi7758521/article/details/51307293
Netty和Node.js在Websocket的性能上,都有良好的表现,至于为什么最后选择了Netty?
嗯,因为名字好听一点. - 代码实现:
出于保密协议和职业道德关系,并没有把写过的代码带出来,所以这里概述一下实现方案,后续会将代码更新在个人的Git上并补上链接.
代码参照Netty原生example修改:
https://github.com/netty/netty/tree/netty-3.10.6.Final/src/main/java/org/jboss/netty/example/http/websocketx
实现方案:
1.系统启动时,服务端绑定要监听的WebSocket端口
2.在用户登入系统时,通过前端JS代码与服务器监听的端口建立连接,这里需要注意的是,WebSocket的连接建立是需要消耗时间来进行握手和协议升级的,所以在通常条件下,JS脚本中新建立的连接直接用来发送消息是会出现异常的,建议在发消息前判断一下readyState,当readyState==1时再进行消息发送
3.用户进行操作时,将操作信息发给服务器,服务器判断消息内容后,将信息推送给已建立连接的客户端
4.采用消息队列对操作信息的接收及发送进行管理 - 后记:
后续实际应用过程中发现,部分华为手机在使用时,客户端无法与服务器正常握手建立连接,所以此类设备在使用时无法接收到推送信息,所以意识到当时的选型是有问题的,只考虑了性能,没有考虑到设备的支持相关问题,所以将选型更新为:SockJS+Netty 3.10.6.Final双模式,由于不可用的设备数量较小,在WebSocket不支持的情况下,可以采用SockJS模拟WebSocket来实现浏览器和 Web 服务器之间低延迟、全双工、跨域的通讯通道.
阅读全文
1 0
- WebSocket初体验(Netty)
- Netty初体验
- netty websocket
- netty websocket
- netty websocket
- 体验WebSocket
- netty学习系列(一)netty初体验
- WebSocket+Netty实现聊天室
- netty websocket chatroom
- Netty之WebSocket开发
- Netty的websocket Demo
- netty实现webSocket协议
- Netty实现WebSocket
- netty实现websocket
- netty实现websocket
- netty实现websocket
- netty websocket 后台消息推送
- netty的websocket服务端开发
- 函数式宏定义与普通函数
- Mybatis控制台打印SQL
- python 安装 Scrapy 报错(已解决)
- hdoj1062 Text Reverse(字符串操作题)
- Python杂记
- WebSocket初体验(Netty)
- Java电话号码和手机号码正则验证
- jsf primefaces中commandbutton刷新页面bug,lazymodel的datatable查询及重置问题
- Laravel 中config的用法
- linux之sort用法
- APP测试功能点总结
- Citrix重塑工作空间,既安全又数字化
- MyBatis Generator 详解
- docker image