Socket.IO与Atmosphere比较

编程入门 行业动态 更新时间:2024-10-19 21:33:23

最近接到一个新需求,前后端保持状态连接,实现动态刷新的效果。那第一个想到的就是webSocket,但是websocket我们知道有一个缺陷就是兼容性比较差(如下图红色表示不兼容的浏览器版本),受网络限制比较大。

我们来看看目前使用反向Ajax技术开发事件驱动的两个组件:Socket.IO;Atmosphere

Socket.IO

socket.io将websocket、ajax和其它的通信方式全部封装成了统一的通信接口,解决了浏览器的兼容性问题,底层会自动选用最佳的通信方式;
socket.io支持两种transport,分别是polling和websocket,两种实际的请求协议不一样,polling使用http请求,websocket使用ws,目前socket.io版本在20220下半年已经出了4.x版本,从3.x版本后出的特性更像是为了解决node.js作为服务端处理不好并发的缺陷做的,目前Java端使用最新netty-socket.io 1.7.22版本也无法支持客户端3.x及更高版本,但是由于Java对于并发有很好的处理机制,所以并不是很需要高版本的socket.io客户端特性;如果实在需要对接3.x版本后的socket.io可以尝试使用其官网提供的engine.io包,但是目前并没有很好的实例,或者客户端在请求时把transport改为websocket,这样使用netty-socket.io也可以接收到消息。

Atmosphere

Atmosphere框架是一个Java框架,它兼容了绝大多数的web服务器,也支持任何支持Servlet3.0规范的web服务器。在对于不同的web服务器它提供了一个通用的API,针对于客户端的js与服务器端的servlet,atmosphere为服务端提供了一种通用的通信信道,开发人员可以自由扩展,但其本身并没有用到任何客户端与服务端之间的协议。atmosphere官网提供了js的api,但是已经不再维护了。atmosphere没有提供像socket.io官网那种可视化文档,用的话只能去看他源码里提供的sample,atmosphere-extension包里提供了对socket.io的支持,但是更新停留在七年前,也就是说它所支持socket.io客户端的版本只有0.x版本。atmosphere官网也给了基于netty做的nettosphere组件,从性能上看确实是完爆atmosphere原生。

选择

socket.io和atmosphere选哪个更好呢,其实也是看业务的需要;两个都可以解决websocket版本不兼容的问题。从性能上选择socket.io会更好,netty-socket.io提供的多路复用很好的解决了客户端连接数过多的问题,其吞吐量比atmosphere高许多,所带来的namespace高级特性更完美切合类似聊天室的实现。atmosphere更倾向于Java后台服务的衍生,以及extension包中提供的一堆高级功能,和它非常好的兼容性。

Jmeter测试

用1000个线程同时请求连接

socket.io transport:websocket

socket.io transport:polling

nettosphere

atmosphere

更多推荐

Socket.IO与Atmosphere比较

本文发布于:2023-06-14 08:43:00,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1457872.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:Socket   IO   Atmosphere

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!