Socket 与 WebSocket

本文转载自:http://zengrong.net/post/2199.htm

1. 概述

选择了 WebSocket 技术之后,不可避免的,我要将它和其他协议以及技术做一下比较。最常见的,就是需要比较 WebSocket 与 HTTP、Socket 技术的异同。

WebSocket 是为了满足基于 Web 的日益增长的实时通信需求而产生的。在传统的 Web 中,要实现实时通信,通用的方式是采用 HTTP 协议不断发送请求。但这种方式即浪费带宽(HTTP HEAD 是比较大的),又消耗服务器 CPU 占用(没有信息也要接受请求)。(下图来自 WebSocket.org

而是用 WebSocket 技术,则会大幅降低上面提到的消耗:(下图来自 websocket.org

关于更详细的描述,尹立的这篇文章讲得非常好:WebSocket(2)–为什么引入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 模型的一种简化(以下内容来自 维基百科):

它将软件通信过程抽象化为四个抽象层,采取协议堆叠的方式,分别实作出不同通信协议。协议套组下的各种协议,依其功能不同,被分别归属到这四个阶层之中7,常被视为是简化的七层OSI模型。

这里有一张图详细介绍了 TCP/IP 协议族中的各个协议在 OSI模型 中的分布,一图胜千言(下图来自 科来):

这里是 PDF 版:

  科来网络通讯协议图2016版 (585.6 KiB, 19 hits)

TCP/IP 协议和 OSI 模型的内容,在互联网上有很多。我没有必要再次介绍它们。在这里,我们只需要知道,HTTP、WebSocket 等协议都是处于 OSI 模型的最高层: 应用层 。而 IP 协议工作在网络层(第3层),TCP 协议工作在传输层(第4层)。

至于 OSI 模型的各个层次都有什么系统和它们对应,这里有篇很好的文章可以满足大家的求知欲:OSI七层模型详解

3. WebSocket、HTTP 与 TCP

从上面的图中可以看出,HTTP、WebSocket 等应用层协议,都是基于 TCP 协议来传输数据的。我们可以把这些高级协议理解成对 TCP 的封装。

既然大家都使用 TCP 协议,那么大家的连接和断开,都要遵循 TCP 协议中的三次握手和四次握手 ,只是在连接之后发送的内容不同,或者是断开的时间不同。

更详细内容可阅读:wireshark抓包图解 TCP三次握手/四次挥手详解

对于 WebSocket 来说,它必须依赖 HTTP 协议进行一次握手 ,握手成功后,数据就直接从 TCP 通道传输,与 HTTP 无关了。

4. Socket 与 WebScoket

Socket 其实并不是一个协议。它工作在 OSI 模型会话层(第5层),是为了方便大家直接使用更底层协议(一般是 TCPUDP )而存在的一个抽象层。

最早的一套 Socket API 是 Berkeley sockets ,采用 C 语言实现。它是 Socket 的事实标准,POSIX sockets 是基于它构建的,多种编程语言都遵循这套 API,在 JAVA、Python 中都能看到这套 API 的影子。

下面摘录一段更容易理解的文字(来自 http和socket之长连接和短连接区别):

Socket是应用层与TCP/IP协议族通信的中间软件抽象层,它是一组接口。在设计模式中,Socket其实就是一个门面模式,它把复杂的 TCP/IP协议族隐藏在Socket接口后面,对用户来说,一组简单的接口就是全部,让Socket去组织数据,以符合指定的协议。

主机 A 的应用程序要能和主机 B 的应用程序通信,必须通过 Socket 建立连接,而建立 Socket 连接必须需要底层 TCP/IP 协议来建立 TCP 连接。建立 TCP 连接需要底层 IP 协议来寻址网络中的主机。我们知道网络层使用的 IP 协议可以帮助我们根据 IP 地址来找到目标主机,但是一台主机上可能运行着多个应用程序,如何才能与指定的应用程序通信就要通过 TCP 或 UPD 的地址也就是端口号来指定。这样就可以通过一个 Socket 实例唯一代表一个主机上的一个应用程序的通信链路了。

WebSocket 则不同,它是一个完整的 应用层协议,包含一套标准的 API

所以,从使用上来说,WebSocket 更易用,而 Socket 更灵活。

5. HTML5 与 WebSocket

WebSocket APIHTML5 标准的一部分, 但这并不代表 WebSocket 一定要用在 HTML 中,或者只能在基于浏览器的应用程序中使用。

实际上,许多语言、框架和服务器都提供了 WebSocket 支持,例如:

时间: 2024-11-05 15:21:26

Socket 与 WebSocket的相关文章

Socket ,WebSocket Ajax 之间的关系与区别

最近参与了一个 局域网聊天的项目.用到了 WebSocket.这里简单介绍一下. Socket与 WebSocket 简单说 Socket 与WebSocket 之间的关系 就和 Java 与Javascript关系一样.没关系. Socket 是 TCP/IP 协议中 传输层与应用层的传输数据用的编程接口.   WebSocket 是 基于HMTL5中浏览器 与 服务器之间 异步通信的方法. WebSocket 与 Ajax Ajax 是 利用 JS和XML,实现网页局部刷新的技术,只能单向从

Socket与WebSocket之分析对比

之前提到Lua 与nodejs使用socket通信,但由于服务端的限制,最终依然选择了 LuaSocket. 现在,面对一个全新的项目,我自然而然地选择了 WebSocket. 因此,我需要了解下面这些问题: Socket 和 WebSocket 有哪些区别和联系? WebSocket 和 HTML5 是什么关系? 必须在浏览器中才能使用 WebSocket 吗? WebSocket 能和 Socket 一样传输 raw 数据么? WebSocket 和 Socket 相比会多耗费流量么? 但是

Http、Socket、WebSocket之间联系与区别

socket和http的区别:Http协议:简单的对象访问协议,对应于应用层.Http协议是基于TCP链接的.tcp协议:对应于传输层ip协议:对应与网络层TCP/IP是传输层协议,主要解决数据如何在网络中传输:而Http是应用层协议,主要解决如何包装数据. Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API),通过Socket,我们才能使用TCP/IP协议. Http连接:http连接就是所谓的短连接,及客户端向服务器发送一次请求,服务器端相应后连接即

Http,Https,socket,websocket,TCP,UDP

Http 什么是http? HTTP(HyperText Transfer Protocol) 超文本传输协议 http用来做什么? 当在客户端输入URL地址,获取服务器的资源,内容显示在浏览器的网页上.使用HTTP协议作为规范,完成从客户端到服务端一系列运作流程. http的运作流程? http的有什么特点? 1. 无状态协议. http协议自身不对请求和响应之间的通信状态进行保存.意思是客户端对服务端进行了一次http请求,之后想知道这次请求了什么,服务端是不进行保存的,不知道之前请求了什么

PHP Socket实现websocket(一)基本函数介绍

WebSocket protocol 是HTML5一种新的协议.它实现了浏览器与服务器全双工通信(full-duplex). 一开始的握手需要借助HTTP请求完成. WebSocket是基于TCP来实现的: Wikipedia:https://en.wikipedia.org/wiki/WebSocket W3C: https://html.spec.whatwg.org/multipage/comms.html#network 服务器端可以参考PHP的socket函数来实现 http://ph

Hosting socket.io WebSocket apps in IIS using iisnode

In this post I explain how to configure a socket.io node.js application to use of WebSockets when hosting it in IIS 8 using iisnode. This complements a recent post in which I showed how to host node.js WebSocket applications in IIS on Windows using i

socket.io websocket

不能不知道的事: 在Http协议中,客户端向服务器端发送请求,服务器端收到请求再进行回应,整个过程中,服务器端是被动方,客户端是主动方: websoket是H5的一种基于TCP的新通信协议,它与Http协议的不同之处就是Websocket能实现服务器端主动推送消息到客户端,服务器端与客户端都能发起通信,实现浏览器与服务器之间的双向通信:socket.io是一个完全由js实现,基于nodejs.支持websocket的协议用于实时通讯.跨平台的开源框架,它包括客户端的js和服务器端的nodejs.

基于socket实现websocket服务

websocket原理 首先,Websocket是一个持久化的协议,相对于HTTP这种非持久的协议来说. HTTP的生命周期通过 Request 来界定,也就是一个 Request 一个 Response ,那么在 HTTP1.0 中,这次HTTP请求就结束了. 在HTTP1.1中进行了改进,使得有一个keep-alive,也就是说,在一个HTTP连接中,可以发送多个Request,接收多个Response.但是请记住 Request = Response, 在HTTP中永远是这样,也就是说一个

PHP Socket实现websocket(二)Socket函数

PHP socket函数和C风格的Socket函数差不多 Socket函数:http://php.net/manual/en/book.sockets.php 服务器端: <?php set_time_limit(0);    $server_socket = socket_create(AF_INET, SOCK_STREAM, SOL_TCP);    socket_bind($server_socket, '127.0.0.1', '1212');    socket_listen($se