发布于 2026-01-06 4 阅读
0

WebSocket详解(非开发者视角)

WebSocket详解(非开发者视角)

欢迎回来!好久没跟大家讲解一些你们可能比我更了解的东西了🙂。在做研究之前,我对WebSocket几乎一无所知。我知道它应用广泛,而且是一种双向通信工具,但除此之外就一无所知了。那么,让我们直接进入正题吧!

WebSocket 的演变

历史回顾!WebSocket 之前是什么?当然是 HTTP! HTTP 是一种无状态的请求-响应机制,全称为“超文本传输​​协议”。它运行多年,至今仍是某些应用场景的绝佳选择,例如网站,HTTP 就非常适合。这种请求/响应机制的用途与如今 WebSocket 的用途基本相同,尽管某些应用场景已经远远超出了 HTTP 的适用范围。如果 HTTP 请求/响应过程中连接中断,也无需担心。由于其无状态特性,您可以随时恢复通信。在过去,人们只需要处理文本文档和少量其他资源,因此 HTTP 完全能够满足需求。

在科技领域,演进是不可避免的,应用程序的发展速度很快,HTTP 协议已经无法满足需求。开发者需要更强大的解决方案,因为应用程序正朝着实时实现的方向发展,而高频率的请求/响应带来的延迟使得实现所需的实时通信变得不可能。于是,长轮询应运而生,它允许 TCP 连接保持比 HTTP 连接稍长一些,但这仅仅是权宜之计,而非彻底的解决方案。延迟和开销问题依然存在……于是,WebSocket 就此诞生!

在 WebSocket 正式命名之前,它HTML5规范中被称为 TCPConnection,作为基于 TCP 的套接字 API 的占位符。WebSocket 诞生于 2008 年 6 月,当时科技企业家Michael Carter发起了一场关于后来成为 WebSocket 的协议的讨论。这个名字的由来是什么呢?Carter 和一位名叫 Ian Hickerson 的伙伴在聊天室里创造了 WebSocket 这个名字。甚至可以说,他们用一个双向通信工具来命名这个双向通信协议(明白我的意思了吧)!到 2009 年底,谷歌在其 Chrome 4 版本中全面支持了 WebSocket,到 2011 年,它已被众多浏览器广泛采用。甚至 iOS 和 Android 也从 2013 年起支持 WebSocket,因此,使用该协议的可能性可谓无穷无尽。

WebSocket:传输协议

现在我们了解了历史,接下来让我们来分析一下这项技术。WebSocket在服务器和客户端之间建立了一条双向通信路径。这条路径是持久的,也就是说,它持续且双向地运行,因此通信延迟极低,效率极高。你无需担心单个的响应和请求,它就像一个无限循环,只要双方同意进行初始的“握手”(实际上是一个响应/请求 HTTP 调用,这意味着它融合了一些传统技术),通信就会一直进行下去。

我找到的一篇文章将 WebSocket 描述为构建在 TCP/IP 协议栈之上的一个轻量级传输层。文章还提到,有些人将 WebSocket 称为协议(比如我),而有些人则将其称为传输层。作者认为“传输层”的说法更准确,我对此非常感兴趣,因为我以前从未听说过“传输层”这个说法,以后我的博客也会这样称呼它。我不想过多地讨论这个问题,建议你自己阅读一下,然后在评论区告诉我你觉得哪种说法更准确!另外,如果你想深入了解 WebSocket,这篇文章绝对值得一读,它是我目前找到的最深入的资料。

图片来源:https://hackernoon.com/everything-you-ever-wanted-to-know-about-websockets-literally-a05f36432999

图片来源:https://hackernoon.com/everything-you-ever-wanted-to-know-about-websockets-literally-a05f36432999

WebSocket 主要三种接口:

WebSocket-服务器连接发送/接收消息的主要接口
CloseEvent-WebSocket 连接关闭时的事件
MessageEvent-从服务器接收到消息时的事件

WebSocket 为客户端应用程序和浏览器提供了一种标准化的方式,使它们无需每次都发送繁琐的请求即可与服务器通信。我一直认为应该事半功倍,而 WebSocket 正是秉承着这一理念!

WebSocket 应用案例

WebSocket 的主要用途已经阐明:它提供了一条从应用程序到服务器的通信路径。以下是一些关于如何使用 WebSocket 进行从服务器到应用程序通信的具体思路:

  1. 社交动态、新闻动态和聊天室!
  2. 多人游戏
  3. 类似 Dropbox 的协作工具或协作编码工具
  4. 基于位置的应用(比如“查找我的朋友”——这算跟踪狂行为还是很酷?大家怎么看?)
  5. 在线学习——这在2020年似乎仍然很有意义!
  6. 还有很多其他的!你还能想到我遗漏的吗?

数据可视化是 WebSocket 的另一个应用场景,这同样是因为数据可视化需要实时性,例如,显示实时天气数据的地图,这样你就能随时知道是该穿人字拖还是雪地靴(如果你像我一样住在科罗拉多州,那么无论如何你都会穿人字拖,因为我们这里的人都很硬核)!

与真正的开发者一起复习 WebSocket 🙂

下周,HarperDB 团队将举办2020 年的最后一场线上活动。如果您想深入了解 WebSocket 及其应用,请务必报名参加!届时,我们将邀请Casne 系统工程师Carl Argabright 与我们一起探讨 WebSocket 的方方面面,并分享一个使用 WebSocket 作为最快方法收集高分辨率数据分析的案例研究。活动将于 12 月 8 日下午 5 点(太平洋标准时间)举行(仅剩五天!)。(如果您无法参加直播,也无需担心,报名后您将收到活动录像!)

如果您更喜欢文字教程,Ethan Arrowood刚刚撰写了一篇关于 HarperDB 和 WebSocket 的精彩教程。您可以在 HarperDB 开发者市场中找到HarperDB WebSocket 客户端。一如既往,欢迎您给我反馈,告诉我 WebSocket 的精彩世界里还有哪些我遗漏的内容。如果您对本系列的后续内容有任何建议,也请告诉我!

文章来源:https://dev.to/harperdb/websocket-explained-by-a-non-developer-3naj