Java实现高性能WebSocket即时消息服务

Posted 技术修养之路

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java实现高性能WebSocket即时消息服务相关的知识,希望对你有一定的参考价值。

即时消息场景:

  1. 聊天室

  2. 即时通知,前端页面消息通知


实现方式:

  1. 短轮询:1或2秒不停的轮询业务接口,短时间不间断轮询

  2. 长轮询:相比于短轮询,这里业务接口实现:如果有数据及时返回, 无数据hold15-20s

  3. 长连接:websocket,当前端和websocket服务open一个连接后, 这个连接是一直保持的,需要维持心跳(ngnix有无心跳断连的机制)

1,2和3的本质区别:


实现技术:

  1. 传统思路是java自带的websocket接口实现

  2. NIO框架之一中netty的websocket(可以自行百度如何接入代码,接入不是很复杂),既然是NEW IO了肯定用新的对吧,新的性能高呀


如何让netty实现海量服务支持:

https://www.cnblogs.com/ruixueyan/p/6382770.html(可以参考这篇博客)


划一划如何做WebSocket服务集群:

  1. 使用redis全局缓存ws连接的user信息

  2. 在分布式的websockt服务间引入MQ等消息中间件

  3. 不引入redis全局存储/MQ服务间消息,基于ip_hash规则, 用户发起ws连接请求, user1 请求到websocket ip1, user2 请求到websocket ip2;需要发送消息时, 实现ip_hash规则算法,定位到user1消息推送websocket ip1,user2消息推送到websocket ip2;动态扩容机器时, ip_hash算法,无感扩容是麻烦。


END


以上是关于Java实现高性能WebSocket即时消息服务的主要内容,如果未能解决你的问题,请参考以下文章

websocket实现原理

websocket实现原理

即时通讯开发中WebSocket和SSE技术如何实现Web端消息推送

tomcat websocket 实现网页在线即时聊天

怎样用java web和websocket实现网页即时通讯

Websocket 聊天实现