首页 > 其他分享 >Socket及WebSocket(九)

Socket及WebSocket(九)

时间:2023-06-16 11:57:06浏览次数:42  
标签:WebSocket 服务器端 接字 连接 Socket 客户端

一、Socket

  套接字(Socket)是对网络中不同主机上的应用进程之间进行双向通信的端点的抽象。一个套接字就是网络上进程通信的一端,提供了应用层进程利用网络协议交换数据的机制。从所处的地位来讲,套接字上联应用进程,下联网络协议栈,是应用程序通过网络协议进行通信的接口,是应用程序与网络协议栈进行交互的接口。Socket的出现,使得程序员可以很方便地访问 TCPIP,从而开发各种网络应用程序。后来套接字被引进到 Windows等操作系统,成为开发网络应用程序的有效工具。

  套接字的主要类型有以下三种:

  • 流套接字:用于提供面向连接、可靠的数据传输服务。该服务将保证数据能够实现无差错、无重复送,并按顺序接收。流套接字之所以能够实现可靠的数据服务,原因在于其使用了传输控制协议TCP。
  • 数据报套接字:提供一种无连接的服务。该服务并不能保证数据传输的可靠性,数据有可能在传输过程中丢失或出现数据重复,且无法保证顺序地接收到数据。数据报套接字使用UDP协议进行数据的传输。
  • 原始套接字:可以读写内核没有处理的IP数据包,而流套接字只能读取TCP协议的数据,数据报套接字只能读取UDP协议的数据。因此,如果要访问其他协议发送的数据必须使用原始套接。

  要通过互联网进行通信,至少需要一对套接字,其中一个运行于客户端,我们称之为 Client Socket,另一个运行于服务器端,我们称之为 Server Socket。套接字之间的连接过程可以分为三个步骤:

  1. 服务器监听:服务器端套接字并不定位具体的客户端套接字,而是处于等待连接的状态,实时监控网络状态。
  2. 客户端请求:客户端的套接字提出连接请求,要连接的目标是服务器端的套接字。为此,客户端的套接字知道服务器端套接字的地址和端口号,然后才能向服务器端接字提出连接请求。
  3. 连接确认:服务器端套接字监听到客户端套接字的连接请求,就会响应客户端套接字的请求,建立一个新的线程,并把服务器端套接字的描述发送给客户端。一旦客户端确认了此描述,连接就建立好了。而服务器端套接字继续处于监听状态,接收其他客户端套接字的连接请求。 

   根据套接字的不同类型,可以将套接字调用分为面向连接服务和无连接服务,面向连接服务的主要特点如下:

  • 数据传输过程必须经过建立连接、维护连接和释放连接3个阶段。
  • 在传输过程中,各分组不需要携带目的主机的地址 。
  • 可靠性好,但由于协议复杂,通信效率不高 。
面向无连接服务的主要特点如下:
  • 不需要连接的各个阶段。
  • 每个分组都携带完整的目的主机地址,在系统中独立传送。
  • 由于没有顺序控制,所以接收方的分组可能出现乱序、重复和丢失现象。
  • 通信效率高,但可靠性不能确保。

二、WebSocket

  WebSocket是一种在单个TCP连接上进行全双工通信的协议。WebSocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手(由浏览器端发起),两者之间就直接可以创建持久性的连接,并进行双向数据传输。

  很多网站为了实现推送技术,所用的技术都是轮询。轮询是在特定的时间间隔(如每1秒),由浏览器对服务器发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然而HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的带宽等资源。HTML5定义了WebSocket协议,能更好的节省服务器资源和带宽,并且能够更实时地进行通讯。

三、WebSocket与Socket的关系

  它们是两个不同的概念,Socket是进程之间进行双向通信的端点的抽象,就像水管的两端;WebSocket是一种建立在TCP连接上进行全双工通信的协议,是HTML5的产物,作为HTML5的一部分,大部分主流浏览器都支持WebSocket,并提供了WebSocket API。

四、WebSocket API

  WebSocket 对象提供了用于创建和管理 WebSocket 连接,以及可以通过该连接发送和接收数据的 API。

  • 创建WebSocket:var aWebSocket = new WebSocket(url [, protocols]);  url表示要连接的服务端Socket地址,protocols表示协议数组(可选)。
  • WebSocket实例属性:
  1. binaryType:返回传输二进制数据的类型;
  2. bufferedAmount:返回已经被send()方法放入队列中但还没有被发送到网络中的数据的字节数;
  3. extensions:返回服务器已选择的扩展值;
  4. protocol:返回服务器端选中的子协议的名称;
  5. readyState:返回当前WebSocket的链接状态(WebSocket.CONNECTING、websocket.open、WebSocket.CLOSING、WebSocket.CLOSED);
  6. url:返回值为当构造函数创建WebSocket实例对象时 URL 的绝对路径。
  • WebSocket实例方法:
  1. close():关闭连接;
  2. send():需要通过 WebSocket 链接传输至服务器的数据排入队列。
  • WebSocket事件:
  1. close:连接关闭触发事件;
  2. error:连接发生错误触发事件;
  3. message:收到新消息时触发事件;
  4. open:连接成功时触发事件。

标签:WebSocket,服务器端,接字,连接,Socket,客户端
From: https://www.cnblogs.com/zqhIndex/p/17484902.html

相关文章

  • websocket 使用
     https://www.runoob.com/html/html5-websocket.html   ......
  • cross socket ICrossHttpServer
    crosssocketICrossHttpServercrosssocket是delphi跨平台的一个socket库。///<author>cxg2023-2-12</author>///TStream(ARequest.body),autobefreeunitsock.CrossHttpSvr;interfaceusessystem.JSON,json.help,keyValue.serialize,api.router,N......
  • webSocket和Socke
    一、webSocket和Socket的概念介绍1、socket翻译为套接字,socket是在应用层和传输层之间的一个抽象层,它把TCP/IP层复杂的操作抽象为几个简单的接口供应用层调用以实现进程在网络中通信。2、WebSocket协议是基于TCP的一种新的网络协议,和http协议一样属于应用层协议,是一种让客户端和......
  • C#-网络通讯框架(一)-HPSocket
    一、简介这里加一张图片 二、基础使用这里加一张图片1、TCP 2、UDP三、与线程池一起使用(TCP) 四、HPSocket扩展Easy组件(部分)  HPSocket.Net目前提供6个Easy组件和2个WebSocket组件ITcpPortForwardingIHttpEasyServerIHttpsEasyServerIHttpEasyAgentIHttpsEas......
  • nginx: [emerg] socket() [::]:80 failed (97: Address family not supported by prot
    nginx:[emerg]socket()[::]:80failed(97:Addressfamilynotsupportedbyprotocol),遇到这个问题,不用多想,基本都是配置了IPv6监听导致,也就是如下配置server{listen80default_server;listen[::]:80default_server;listen[::]:8......
  • 5.26日学习总结之网络编程socket
    Pythonsocket编程在网络上的教程较少,菜鸟中也只是给出了一小段描述,在此我推荐白羽黑夜socket编程|白月黑羽(byhy.net)其中的描写非常详细,本人也是在此学习的。socket又被称作套接字,可以简单的看作是两个地址(ip,port地址)之间通过socket的函数来进行传递数据。socket在客户端......
  • Python标准库socketserver使用线程混入实现异步TCP服务器
    功能描述:使用Python标准库socketserver中提供的ThreadingTCPServer实现异步TCP服务端程序,隐藏线程创建与管理细节,自动为每个客户端连接创建线程并处理数据。服务端代码: 客户端代码:......
  • Python标准库socketserver实现UDP协议时间服务器
    Python标准库socketserver进行了更高一级的封装,非常适合服务端代码的编写,本文通过改写时间服务器的案例来演示标准库socketserver的用法,更多案例最近会陆续推送。服务端代码: 客户端代码: 运行情况:   ......
  • webSocket-全双工通信协议
    1、springboot2.0集成webSocket项目结构maven依赖<parent><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-parent</artifactId><version>2.0.6.RELEASE</version>&......
  • websocket
    1.WebSocket介绍WebSocket是一种网络通信协议。RFC6455定义了它的通信标准。WebSocket是HTML5开始提供的一种在单个TCP连接上进行全双工通讯的协议。HTTP协议是一种无状态的、无连接的、单向的应用层协议。它采用了请求/响应模型。通信请求只能由客户端发起,服务......