Java实现高性能WebSocket即时消息服务
Posted 技术修养之路
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实现高性能WebSocket即时消息服务相关的知识,希望对你有一定的参考价值。
即时消息场景:
聊天室
即时通知,前端页面消息通知
实现方式:
短轮询:1或2秒不停的轮询业务接口,短时间不间断轮询
长轮询:相比于短轮询,这里业务接口实现:如果有数据及时返回, 无数据hold15-20s
长连接:websocket,当前端和websocket服务open一个连接后, 这个连接是一直保持的,需要维持心跳(ngnix有无心跳断连的机制)
1,2和3的本质区别:
实现技术:
传统思路是java自带的websocket接口实现
NIO框架之一中netty的websocket(可以自行百度如何接入代码,接入不是很复杂),既然是NEW IO了肯定用新的对吧,新的性能高呀
如何让netty实现海量服务支持:
https://www.cnblogs.com/ruixueyan/p/6382770.html(可以参考这篇博客)
划一划如何做WebSocket服务集群:
使用redis全局缓存ws连接的user信息
在分布式的websockt服务间引入MQ等消息中间件
不引入redis全局存储/MQ服务间消息,基于ip_hash规则, 用户发起ws连接请求, user1 请求到websocket ip1, user2 请求到websocket ip2;需要发送消息时, 实现ip_hash规则算法,定位到user1消息推送websocket ip1,user2消息推送到websocket ip2;动态扩容机器时, ip_hash算法,无感扩容是麻烦。
END
以上是关于Java实现高性能WebSocket即时消息服务的主要内容,如果未能解决你的问题,请参考以下文章