常用的Websocket技术一览

本文涉及的产品
性能测试 PTS,5000VUM额度
注册配置 MSE Nacos/ZooKeeper,118元/月
可观测监控 Prometheus 版,每月50GB免费额度
简介: Websocket是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebSocket 使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据,当然也支持客户端发送数据到服务端。通常用来社交聊天、弹幕、多玩家游戏、协同编辑、股票基金实时报价、资讯自动更新等场景,那么今天就简单聊一下在Java开发中对Websocket的技术选型。

1. 前言

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

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

2. 常用的Websocket技术

2.1 Java Websocket规范

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

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

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

2.2 SockJS

SockJS是一个浏览器JavaScript库,对Websocket进行了抽象。SockJS为您提供了一个一致的,跨浏览器的Javascript API,该API在浏览器和Web服务器之间创建了低延迟,全双工,跨域的通信通道。SockJS尝试首先使用本机WebSockets。如果失败了,它将尝试其它各种特定于浏览器的传输协议,例如xhr-streamingServer 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 WebfluxRSocket就是其中的代表,目前官方已经放出了一些相关的DEMO。

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

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

3. 总结

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

附:性能基准测试

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

相关文章
|
8天前
|
数据采集 监控 机器人
浅谈网页端IM技术及相关测试方法实践(包括WebSocket性能测试)
最开始转转的客服系统体系如IM、工单以及机器人等都是使用第三方的产品。但第三方产品对于转转的业务,以及客服的效率等都产生了诸多限制,所以我们决定自研替换第三方系统。下面主要分享一下网页端IM技术及相关测试方法,我们先从了解IM系统和WebSocket开始。
25 4
|
5月前
|
前端开发 JavaScript 网络协议
深入理解Python Web开发中的前后端分离与WebSocket实时通信技术
【7月更文挑战第18天】前后端分离采用Flask/Django框架,前端JavaScript框架如Vue.js与后端通过AJAX/Fetch通信。WebSocket提供实时双向通信,Python可借助websockets库或Flask-SocketIO实现。最佳实践包括定义清晰的接口规范,确保安全性(HTTPS,认证授权),优化性能,和健壮的错误处理。结合两者,打造高效实时应用。
99 1
|
7月前
|
网络协议 算法
WebSocket 技术详解
【2月更文挑战第12天】
222 1
|
6月前
|
NoSQL Redis Python
技术经验分享:Django实现websocket
技术经验分享:Django实现websocket
37 0
|
2月前
|
负载均衡 网络协议 C#
C#实现WebSocket实时消息推送技术详解
C#实现WebSocket实时消息推送技术详解
57 1
|
3月前
|
前端开发 JavaScript 安全
深入理解Python Web开发中的前后端分离与WebSocket实时通信技术
在现代Web开发中,前后端分离已成为主流架构,通过解耦前端(用户界面)与后端(服务逻辑),提升了开发效率和团队协作。前端使用Vue.js、React等框架与后端通过HTTP/HTTPS通信,而WebSocket则实现了低延迟的全双工实时通信。本文结合Python框架如Flask和Django,探讨了前后端分离与WebSocket的最佳实践,包括明确接口规范、安全性考虑、性能优化及错误处理等方面,助力构建高效、实时且安全的Web应用。
64 2
|
3月前
|
前端开发 API Python
WebSocket技术详解:如何在Python Web应用中实现无缝实时通信
在Web开发的广阔领域中,实时通信已成为许多应用的核心需求。传统的HTTP请求-响应模型在实时性方面存在明显不足,而WebSocket作为一种在单个长连接上进行全双工通信的协议,为Web应用的实时通信提供了强有力的支持。本文将深入探讨WebSocket技术,并通过一个Python Web应用的案例分析,展示如何在Python中利用WebSocket实现无缝实时通信。
71 2
|
3月前
|
监控 网络协议 API
.NET WebSocket 技术深入解析,你学会了吗?
【9月更文挑战第4天】WebSocket 作为一种全双工协议,凭借低延迟和高性能特点,成为实时应用的首选技术。.NET 框架提供了强大的 WebSocket 支持,使实时通信变得简单。本文介绍 WebSocket 的基本概念、.NET 中的使用方法及编程模型,并探讨其在实时聊天、监控、在线游戏和协同编辑等场景的应用,同时分享最佳实践,帮助开发者构建高效实时应用。
164 12
|
7月前
|
网络协议 JavaScript 前端开发
WebSocket:实现客户端与服务器实时通信的技术
WebSocket:实现客户端与服务器实时通信的技术
|
3月前
|
JavaScript 前端开发 Java
【颠覆传统】Spring框架如何用WebSocket技术重塑实时通信格局?揭秘背后的故事与技术细节!
【9月更文挑战第4天】随着Web应用对实时交互需求的增长,传统的HTTP模型已无法满足现代应用的要求,特别是在需要持续、双向通信的场景下。WebSocket协议由此诞生,提供全双工通信渠道,使服务器与客户端能实时互发消息。作为Java开发中最受欢迎的框架之一,Spring通过其WebSocket模块支持这一协议,简化了WebSocket在Spring应用中的集成。
59 0