Socket.IO与Atmosphere比较

news2025/4/17 15:16:48

最近接到一个新需求,前后端保持状态连接,实现动态刷新的效果。那第一个想到的就是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

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/87811.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

常考vue面试题(附答案)

Vue生命周期钩子是如何实现的 vue的生命周期钩子就是回调函数而已,当创建组件实例的过程中会调用对应的钩子方法内部会对钩子函数进行处理,将钩子函数维护成数组的形式 Vue 的生命周期钩子核心实现是利用发布订阅模式先把用户传入的的生命周期钩子订阅好…

2022年山东建筑安全员考试真题题库及答案

百分百题库提供建筑安全员考试试题、安全员证考试真题、安全员证考试题库等,提供在线做题刷题,在线模拟考试,助你考试轻松过关。 142.施工现场内的()等机械设备,以及钢脚手架和正在施工的在建工程等的金属结构,当在相邻建筑物、构筑物等设施防雷装置接闪…

C++ Reference: Standard C++ Library reference: Containers: map: map: clear

C官网参考链接&#xff1a;https://cplusplus.com/reference/map/map/clear/ 公有成员函数 <map> std::map::clear C98 void clear(); C11 void clear() noexcept;清除内容 从map容器中删除所有元素&#xff08;已销毁&#xff09;&#xff0c;使容器的size为0。 形参 …

【Kafka】Mac下安装与使用,SpringBoot整合案例

【Kafka】Mac下安装与使用&#xff0c;SpringBoot整合案例&#xff08;一&#xff09;下载安装&#xff08;二&#xff09;测试用例【1】启动zookeeper【2】启动kafka【3】创建Topic【4】查看Topic【5】删除Topic【6】生产/消费数据【7】查看消费组【8】查看消费组详情&#xf…

太卷了,这份Java架构师晋升指南首次公开,GitHub下载量已破百万

最近和各位小伙伴儿私下聊的比较多&#xff0c;各个阶段的朋友都有&#xff1b;因为大环境的内卷&#xff0c;导致大家在求学、求职、提升自己的各个方面都多多少少有些迷茫焦虑&#xff1b; 这些其实是一个非常普遍且正常的现象&#xff0c;会焦虑的人&#xff0c;往往都是对…

智云通CRM:那些令你无法控制的销售局面(二)

1、向并不合适的潜在客户进行销售 选对战场是分配资源的关键。对于那些销售工作很复杂的业务员来说&#xff0c;他们当中的大多数一年最多会有10-20次的机会&#xff0c;可是有些时候&#xff0c;最后他们手里的机会也就剩下一个了。挑选不合适的潜在客户会消耗许多资源。 2、…

家电供应链再遭新风险,SCM供应链管理系统加快业务流转提升企业内控水平

在疫情不断反复的影响下&#xff0c;刚刚进入复苏阶段的家电企业再次面临新一轮危机。2022年一季度&#xff0c;中国家电实现零售额1430亿元&#xff0c;同比下降11.1%&#xff1b;线上家电零售市场下降7.5%。海关数据显示&#xff0c;前两个月&#xff0c;家电产品海外出口规模…

[附源码]计算机毕业设计的校园报修平台Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

基于Java实现(Web)考勤管理系统【100010040】

考勤系统设计文档 一、用户需求 1.1 目标 规范员工的上下班、请假、外出工作等行为方便计算员工的薪金方便管理各种带薪假期共享员工的请假及外出工作的信息 1.2 涉众 序号涉众待解决的问题1普通员工方便的查看自己的请假及外出记录2行政部员工与财务部的“接口”尽量简单…

Revit中模型文字的放置和族库工具介绍

一、Revit中模型文字的放置 模型文字一般放置在构件表面&#xff0c;因此我们在放置模型文字的时候一定要注意先设置工作平面这样的话会让模型文字更容易放凰而且定位较准。 1.工作平面的设定 2.拾取工作平面&#xff0c;将鼠标放在要拾取面的地方&#xff0c;如果不能一下子就…

线程池监控和动态配置

线程池 线程池是一种 “池化” 的线程使用模式&#xff0c;通过创建一定数量的线程&#xff0c;让这些线程处于就绪状态来提高系统响应速度&#xff0c;在线程使用完成后归还到线程池来达到重复利用的目标&#xff0c;从而降低系统资源的消耗。 池的好处 使用线程池&#xf…

远程桌面时出现“身份验证错误,要求的函数不受支持”解决办法

远程桌面时 “出现身份验证错误&#xff0c;要求的函数不受支持”的错误&#xff0c;如图所示&#xff1a; 这是由于本地客户端或者服务器端一方更新了CVE-2018-0886 的 CredSSP 补丁&#xff0c;而另外一方未安装更新的原因导致的&#xff0c;详见&#xff1a; CVE-2018-0886…

[附源码]计算机毕业设计的物品交换平台Springboot程序

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; Springboot mybatis MavenVue等等组成&#xff0c;B/S模式…

Linux内核基础篇——printk调试

文章目录printk等级修改printk等级printk的输出格式pr_xx( )封装很多内核开发者喜欢的调试工具是printk&#xff0c;在Linux内核中&#xff0c;使用printk()函数来打印信息&#xff0c;它与C库的printf()函数类似。 printk()与printf()的一个重要区别是&#xff1a;printk()提…

大学生动物介绍网页设计作品 dreamweaver作业静态HTML网页设计模板 保护动物网页作业制作

&#x1f389;精彩专栏推荐 &#x1f4ad;文末获取联系 ✍️ 作者简介: 一个热爱把逻辑思维转变为代码的技术博主 &#x1f482; 作者主页: 【主页——&#x1f680;获取更多优质源码】 &#x1f393; web前端期末大作业&#xff1a; 【&#x1f4da;毕设项目精品实战案例 (10…

Java中synchronized关键字到底怎么用,这个例子一定要看!

在平时开发中&#xff0c;synchronized关键字经常遇到&#xff0c;你知道synchronized怎么用吗&#xff1f;本文给大家介绍一下。 我们有两种方法使用同步&#xff1a; 使用同步方法使用同步语句或块 使用同步方法 要使方法同步&#xff0c;只需将synchronized关键字添加到其…

用javascript分类刷leetcode3.动态规划(图文视频讲解)

什么是动态规划 动态规划&#xff0c;英文&#xff1a;Dynamic Programming&#xff0c;简称DP&#xff0c;将问题分解为互相重叠的子问题&#xff0c;通过反复求解子问题来解决原问题就是动态规划&#xff0c;如果某一问题有很多重叠子问题&#xff0c;使用动态规划来解是比较…

测量温度的优选模块——新型设备M-THERMO3 16

| 具有16个自由选择通道的新型温度测量设备M-THERMO3 16 IPETRONIK推出了新的温度测量设备——M-THERMO3 16。作为新一代设备的首个模块&#xff0c;它为模块化测量技术确立了标准。该模块具有16个通道&#xff0c;并且各通道不仅分别率高达24位ADC&#xff0c;而且可以自由选…

git初学(二)

git如何进行版本控制&#xff1f; 如何做版本控制呢&#xff1f;其实就是让git管理文件夹&#xff0c;比如我们有一个项目叫学生考试管理系统&#xff0c;首先我们创建一个文件夹student&#xff0c;这个文件夹当中保存所开发的所有代码 进入要管理的文件夹 初始化 git ini…

FTX创始人被警方逮捕:身价曾超150亿美元 坑惨红杉

雷递网 雷建平 12月13日“加密货币大王”、加密货币交易所FTX创始人、前首席执行官&#xff08;CEO&#xff09;萨姆班克曼-弗里德&#xff08;Sam Bankman-Fried&#xff0c; 简称“SBF”&#xff09;日前在巴哈马被逮捕&#xff0c;可能被引渡至美国。巴哈马总检察长办公室和…