C# WebSocket简介

一、websocket简介

websocket是一种在单个TCP连接上进行全双工通信的协议。

websocket使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在WebSocket API中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。

二、背景

很多网站为了实现推送技术,所用的技术都是轮询。

轮询是在特定的时间间隔,由浏览器对客户端发出HTTP请求,然后由服务器返回最新的数据给客户端的浏览器。这种传统的模式带来很明显的缺点,即浏览器需要不断的向服务器发出请求,然后HTTP请求可能包含较长的头部,其中真正有效的数据可能只是很小的一部分,显然这样会浪费很多的宽带等资源。

在这种情况下,HTML5定义了websocket协议,能更好的节省服务器资源和宽带,而且能够更实时地进行通讯。

三、优点

1、控制开销

创建连接后,服务器和客户端之间交换数据时,用于协议控制的数据包头部相对较小。

2、实时性更强

由于协议是全双工的,所以服务器可以随时主动给客户端下发数据。相对于HTTP请求需要等待客户端发起请求服务端才能响应,延迟明显更少。

3、保持连接状态

与HTTP不同的是,Websocket需要先创建连接,这就使得其成为一种有状态的协议,之后通信时可以省略部分状态信息。而HTTP请求可能需要在每个请求都携带状态信息(如身份认证等)。

4、更好的二进制支持

5、支持扩展和更好的实现压缩效果

四、原理

websocket同HTTP一样也是应用层的协议,但是它是一种双向通信协议,建立在TCP之上的。

连接过程(握手过程)

1、客户端、服务器建立TCP连接,三次握手。

这是通信的基础,传输控制层,若失败后续都不执行。

2、TCP连接成功后,客户端通过HTTP协议向服务器传送websocket支持的版本号信息。(开始前的HTTP握手)

3、服务器收到客户端的握手请求后,同样采用HTTP协议回馈数据。

4、当收到了连接成功的消息后,通过TCP通道进行传输通信。

五、websocket和socket的关系

socket其实并不是一个协议,而是为了方便使用TCP和UDP而抽象出来的一层,是位于应用层和传输控制层之间的一组接口。

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

 

两台主机通信,必须通过socket连接,socket则利用TCP/IP协议建立TCP连接。TCP连接则更依靠于底层的IP协议,IP协议的连接则依赖于链路层等更低层次。

websocket则是一个典型的应用层协议。

webSocket和HTTP的主要区别在于它们的通信模式和数据传输效率,这些区别决定了它们在不同场景下的适用性。‌

通信模式
‌HTTP‌:HTTP是一种请求-响应模型,客户端(如浏览器)发送请求到服务器,服务器处理后返回响应。这种模型是单向的,每次请求都需要建立新的连接,处理完请求后连接关闭。HTTP是无状态的,服务器不会保存客户端的状态‌

‌WebSocket‌:WebSocket支持全双工通信,即客户端和服务器之间可以相互发送消息,无需等待请求。一旦连接建立,除非手动关闭或遇到异常,连接会一直保持。WebSocket是长连接,客户端和服务器之间可以实时传递数据‌

数据传输效率
‌HTTP‌:每次HTTP请求都有较大的开销,因为每个请求都会包含头部信息、方法、状态码等元数据。频繁的请求会导致性能降低‌

‌WebSocket‌:WebSocket连接建立后,不需要每次传输头部信息,数据传输非常高效。特别适用于需要频繁、实时数据更新的场景‌

使用场景
‌HTTP‌:适用于页面加载、文件下载、REST API调用等一次性请求和响应的场景,或者以轮询方式进行定期请求以获取更新‌

‌WebSocket‌:适用于需要服务器主动推送数据的场景,如在线教育、视频弹幕、体育实况更新、视频会议和聊天等
为什么不直接使用 TCP 而不是 WebSocket?

虽然TCP 也是全双工,但直接使用缺乏应用层协议
由于浏览器环境限制(直接使用原生 TCP 通信是不被允许)
防火墙兼容性:WebSocket 默认使用 HTTP/HTTPS 的 80443 端口,而这些端口通常在网络中是开放的;直接使用 TCP 的其他端口(如 808012345 等)可能会被防火墙或代理阻断
来源:https://www.zhangshengrong.com/p/nDa9jWORNj/

 

posted @ 2024-11-07 10:10  【君莫笑】  阅读(381)  评论(0)    收藏  举报