最新消息:雨落星辰是一个专注网站SEO优化、网站SEO诊断、搜索引擎研究、网络营销推广、网站策划运营及站长类的自媒体原创博客

websocket

旗下网站admin8浏览0评论

websocket

websocket

-

2023年4月18日发(作者:路由器是猫吗)WebSocket和socket的区别 去年光棍节的时候,我写过⼀篇 。这篇⽂章介绍了我为何决定在项⽬中使⽤ LuaSocket 。现在想起来,当时对 WebSocket 是很感兴趣的,但由于服务端的限制,最终依然选择了 LuaSocket。我后来对 ,使其更好⽤。现在,⾯对⼀个全新的项⽬,我⾃然⽽然地选择了 WebSocket。因此,我需要了解下⾯这些问题:1. Socket 和 WebSocket 有哪些区别和联系?2. WebSocket 和 HTML5 是什么关系?3. 必须在浏览器中才能使⽤ WebSocket 吗?4. WebSocket 能和 Socket ⼀样传输 raw 数据么?5. WebSocket 和 Socket 相⽐会多耗费流量么?但是,⽬前⽹上全⾯介绍这两种协议的中⽂⽂章并不多,或者说不够全⾯。我⽆法找到⼀篇⽂章能解决上⾯的所有问题。因此,我写了本⽂,把找到的 Socket 和 WebSocket 的相关资料做⼀个梳理,以⽅便理解。本⽂并不能直接完整回答上⾯提出的⼏个问题,但读完本⽂,要理解上⾯的那些问题,是很容易的事。由于能⼒有限,本⽂不可能很长。⽽且,技术细节并⾮所有⼈都愿意仔细了解。本⽂包含了⼤量的外部链接,跟随这些链接,可以找到⾜够多的细节,满⾜你/我的求知欲。1. 概述选择了 WebSocket 技术之后,不可避免的,我要将它和其他协议以及技术做⼀下⽐较。最常见的,就是需要⽐较 WebSocket 与 HTTP、Socket 技术的异同。WebSocket 是为了满⾜基于 Web 的⽇益增长的实时通信需求⽽产⽣的。在传统的 Web 中,要实现实时通信,通⽤的⽅式是采⽤ HTTP 协议不断发送请求。但这种⽅式即浪费带宽(HTTP HEAD 是⽐较⼤的),⼜消耗服务器 CPU 占⽤(没有信息也要接受请求)。(下图来⾃ )⽽是⽤ WebSocket 技术,则会⼤幅降低上⾯提到的消耗:(下图来⾃)关于更详细的描述,尹⽴的这篇⽂章讲得⾮常好: 。那么,WebSocket 到底与 HTTP 协议到底是⼀个什么样的关系呢?它和 Socket ⼜有什么联系?这就要讲到 OSI 模型和 TCP/IP 协议族。2. OSI 模型与 TCP/IP以下是 中关于OSI 模型的说明:开放式系统互联通信参考模型(英语:Open System Interconnection Reference Model,ISO/IEC 7498-1),简称为OSI模型(OSI model),⼀种概念模型,由国际标准化组织(ISO)提出,⼀个试图使各种计算机在世界范围内互连为⽹络的标准框架。⽽ TCP/IP 协议可以看做是对 OSI 模型的⼀种简化(以下内容来⾃ ):它将软件通信过程抽象化为四个抽象层,采取协议堆叠的⽅式,分别实作出不同通信协议。协议套组下的各种协议,依其功能不同,被分别归属到这四个阶层之中,常被视为是简化的七层OSI模型。这⾥有⼀张图详细介绍了 TCP/IP 协议族中的各个协议在 OSI模型 中的分布,⼀图胜千⾔(下图来⾃ ):TCP/IP 协议和 OSI 模型的内容,在互联⽹上有很多。我没有必要再次介绍它们。在这⾥,我们只需要知道,HTTP、WebSocket 等协议都是处于 OSI 模型的最⾼层: 应⽤层 。⽽ IP 协议⼯作在⽹络层(第3层),TCP 协议⼯作在传输层(第4层)。⾄于 OSI 模型的各个层次都有什么系统和它们对应,这⾥有篇很好的⽂章可以满⾜⼤家的求知欲: 。3. WebSocket、HTTP 与 TCP从上⾯的图中可以看出,HTTP、WebSocket 等应⽤层协议,都是基于 TCP 协议来传输数据的。我们可以把这些⾼级协议理解成对 TCP 的封装。既然⼤家都使⽤ TCP 协议,那么⼤家的连接和断开,都要遵循 ,只是在连接之后发送的内容不同,或者是断开的时间不同。更详细内容可阅读:对于 WebSocket 来说,它必须依赖 ,握⼿成功后,数据就直接从 TCP 通道传输,与 HTTP ⽆关了。4. Socket 与 WebScoket 其实并不是⼀个协议。它⼯作在 OSI 模型会话层(第5层),是为了⽅便⼤家直接使⽤更底层协议(⼀般是 或 )⽽存在的⼀个抽象层。最早的⼀套 Socket API 是 ,采⽤ C 语⾔实现。它是 Socket 的事实标准,POSIX sockets 是基于它构建的,多种编程语⾔都遵循这套API,在 JAVA、Python 中都能看到这套 API 的影⼦。下⾯摘录⼀段更容易理解的⽂字(来⾃ ):Socket是应⽤层与TCP/IP协议族通信的中间软件抽象层,它是⼀组接⼝。在设计模式中,Socket其实就是⼀个门⾯模式,它把复杂的TCP/IP协议族隐藏在Socket接⼝后⾯,对⽤户来说,⼀组简单的接⼝就是全部,让Socket去组织数据,以符合指定的协议。主机 A 的应⽤程序要能和主机 B 的应⽤程序通信,必须通过 Socket 建⽴连接,⽽建⽴ Socket 连接必须需要底层 TCP/IP 协议来建⽴ TCP 连接。建⽴ TCP 连接需要底层 IP 协议来寻址⽹络中的主机。我们知道⽹络层使⽤的 IP 协议可以帮助我们根据 IP 地址来找到⽬标主机,但是⼀台主机上可能运⾏着多个应⽤程序,如何才能与指定的应⽤程序通信就要通过 TCP 或 UPD 的地址也就是端⼝号来指定。这样就可以通过⼀个 Socket 实例唯⼀代表⼀个主机上的⼀个应⽤程序的通信链路了。⽽ 则不同,它是⼀个完整的 ,包含⼀套标准的 。所以,从使⽤上来说,WebSocket 更易⽤,⽽ Socket 更灵活。5. HTML5 与 WebSocket 是 标准的⼀部分, 但这并不代表 WebSocket ⼀定要⽤在 HTML 中,或者只能在基于浏览器的应⽤程序中使⽤。实际上,许多语⾔、框架和服务器都提供了 WebSocket ⽀持,例如:基于 C 的 基于 的 基于 Python 的 基于 C++ 的 Apache 对 WebSocket 的⽀持: Nginx 对 WebSockets 的⽀持: 、 、lighttpd 对 WebSocket 的⽀持:

-

websocket

发布评论

评论列表(0)

  1. 暂无评论