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 的 80 和 443 端口,而这些端口通常在网络中是开放的;直接使用 TCP 的其他端口(如 8080、12345 等)可能会被防火墙或代理阻断
来源:https://www.zhangshengrong.com/p/nDa9jWORNj/

浙公网安备 33010602011771号