常用的Websocket技术一览

1. 前言

Websocket是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据,当然也支持客户端发送数据到服务端。通常用来社交聊天、弹幕、多玩家游戏、协同编辑、股票基金实时报价、资讯自动更新等场景,那么今天就简单聊一下在Java开发中对Websocket的技术选型。

技术选型是结合自身业务选择最适合的技术方案,并不存在褒贬。

2. 常用的Websocket技术

2.1 Java Websocket规范

这是JavaEE提供的规范,在包javax.websocket下,包含客户端API和服务端API,服务端API完全依赖于客户端API,只是在其基础上添加了一些功能,所以只需要导入服务端依赖即可。 具体实现需要Web容器、JavaEE服务器或者框架提供。我们常用的Web容器Tomcat、Undertow等都支持。

优点:集成起来简单,原生的Java支持。

缺点:和Web服务器等共享容器耦合度高,广播、组播需要自行控制。并发量较低,调优麻烦,存在兼容性问题。

2.2 SockJS

SockJS是一个浏览器JavaScript库,对Websocket进行了抽象。SockJS为您提供了一个一致的,跨浏览器的Javascript API,该API在浏览器和Web服务器之间创建了低延迟,全双工,跨域的通信通道。SockJS尝试首先使用本机WebSockets。如果失败了,它将尝试其它各种特定于浏览器的传输协议,例如xhr-streaming、Server sent events 以及长轮询等。通常也会配合STOMP(面向消息的简单文本协议)来简化其使用。其实Spring 的Websocket组件中采用的就是此协议。

优点:社区活跃,技术成熟,协议栈丰富,有全套Spring解决方案,兼容性强,另外可以结合发布订阅模式。

缺点:需要对SockJS和STOMP进行学习,断线重连、心跳检测、二进制支持不好。

2.3 Socket.IO

Socket.IO 是一个基于 Node.js 的实时应用程序框架,在即时通讯、通知与消息推送,实时分析等场景中有较为广泛的应用,但是它提供基于Netty的服务端实现以及客户端实现,同时支持Websocket和长轮询。除了Websocket的常用场景外,我们可以通过该组件实现安卓和IOS的消息推送。

优点:性能良好,支持广播、组播,断线重连、心跳检测、二进制。支持安卓和IOS平台。社区活跃。

缺点:需要自行封装同Spring的集成,服务端并非社区维护,资源消耗大。

2.4 ReactiveStream

一些反应流规范和框架也对Websocket进行了实现。Spring Webflux和RSocket就是其中的代表,目前官方已经放出了一些相关的DEMO。

优点:高吞吐量、高性能。

缺点:技术比较新、学习资料少。

3. 总结

如果业务量非常少而且非常急迫的话第一种可以尝试一下。SockJS和Socket.IO的争论点在于性能上后者要好一些,当然资源也消耗大,对移动端的推送功能支持更好一些。在Spring整合上以及全套解决方案上SockJS更具优势。如果追求高性能、高吞吐量的Websocket那么无疑反应式更加合适,但是学习成本也相对较高。其它小众的技术这里不做评测,如果你有比较好的方案可留言讨论。关注我支持一下

附:性能基准测试

以下是国外某论文在2020年对原生Websocket、SockJS、Socket.IO进行的性能测试的一些关键指标。

编辑切换为居中

添加图片注释,不超过 140 字(可选)

编辑切换为居中

添加图片注释,不超过 140 字(可选)

编辑切换为居中

添加图片注释,不超过 140 字(可选)

                                                        资源获取:
大家 点赞、收藏、关注、评论啦 、 查看👇🏻👇🏻👇🏻 微信公众号获取联系方式👇🏻👇🏻👇🏻
精彩专栏推荐订阅:下方专栏👇🏻👇🏻👇🏻👇🏻

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
三菱PLC常用指令一览表如下: 1. LD(Load)指令:将指定的位或字数据装载到寄存器中。 2. AND(与)指令:对两个位或字数据进行与运算,产生结果。 3. OR(或)指令:对两个位或字数据进行或运算,产生结果。 4. OUT(输出)指令:将指定的位或字数据送到指定的输出设备。 5. IN(输入)指令:将指定的输入设备的状态读入到指定的位或字数据中。 6. MOV(移动)指令:将指定的位或字数据从一个地方移动到另一个地方。 7. ADD(加法)指令:对两个字数据进行加法运算,产生结果。 8. SUB(减法)指令:对两个字数据进行减法运算,产生结果。 9. MUL(乘法)指令:对两个字数据进行乘法运算,产生结果。 10. DIV(除法)指令:对两个字数据进行除法运算,产生结果。 11. JMP(跳转)指令:跳转到指定的程序指令。 12. TIM(定时器)指令:用于计时或延时操作。 13. CNT(计数器)指令:用于计数操作。 14. SET(置位)指令:将指定的位数据置为1。 15. RST(复位)指令:将指定的位数据复位为0。 16. XCHG(交换)指令:将两个字数据的内容进行交换。 以上是三菱PLC常见的指令一览表,使用这些指令可以实现对PLC控制器的输入输出、数据处理、计时计数等操作。无论是程序控制、逻辑控制还是运算处理,都可以通过这些指令来完成。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值