gogogo
管理员
管理员
  • UID25
  • 粉丝0
  • 关注0
  • 发帖数1384
阅读:2734回复:0

websocket 介绍 与 用途

楼主#
更多 发布于:2022-06-15 16:57

WebSocket协议是基于TCP的一种新的网络协议。它实现了浏览器与服务器全双工(full-duplex)通信--允许服务器主动发送信息给客户端。

WebSocket通信协议于2011年被IETF定为标准RFC 6455,并被RFC7936所补充规范。

优点  服务器可以主动传送数据给客户端

功能  实现了浏览器与服务器全双工通信

产生背景

简单的说,WebSocket协议之前,双工通信是通过不停发送HTTP请求(轮询),从服务器拉取更新来实现,这导致了效率低下。WebSocket解决了这个问题。下面是标准RFC6455中的产生背景概述。

长久以来, 创建实现客户端和用户端之间双工通讯的web app都会造成HTTP轮询的滥用: 客户端向主机不断发送不同的HTTP呼叫来进行询问。

这会导致一系列的问题:

1.服务器被迫为每个客户端使用许多不同的底层TCP连接:一个用于向客户端发送信息,其它用于接收每个传入消息。

2.有些协议有很高的开销,每一个客户端和服务器之间都有HTTP头。

3.客户端脚本被迫维护从传出连接到传入连接的映射来追踪回复。

一个更简单的解决方案是使用 单个TCP连接 双向通信。 这就是WebSocket协议所提供的功能。 结合WebSocket API ,WebSocket协议提供了一个用来替代HTTP轮询实现网页到远程主机的双向通信的方法。

WebSocket协议被设计来取代用HTTP作为传输层的双向通讯技术,这些技术只能牺牲效率和可依赖性其中一方来提高另一方,因为HTTP最初的目的不是为了双向通讯。(获得更多关于此的讨论可查阅RFC6202)

实现原理

在实现websocket连线过程中,需要通过浏览器发出websocket连线请求,然后服务器发出回应,这个过程通常称为"握手" 。在 WebSocket API,浏览器和服务器只需要做一个握手的动作,然后,浏览器和服务器之间就形成了一条快速通道。两者之间就直接可以数据互相传送。在此WebSocket 协议中,为我们实现即时服务带来了两大好处:

1. Header  互相沟通的Header是很小的-大概只有 2 Bytes

2. Server Push  服务器的推送,服务器不再被动的接收到浏览器的请求之后才返回数据,而是在有新数据时就主动推送给浏览器。

HTML5WebSocketAPI

在HTML5中内置有一些API,用于响应应用程序发起的请求。基本API语句如下:

创建对象

url为WebSocket服务器的地址,name为发起握手的协议名称,为可选择项。

折叠发送文本消息

msg为文本消息,对于其他类型的可以通过二进制形式发送。

折叠关闭连接

浏览器以及语言支持

所有主流浏览器都支持RFC6455。但是具体的WebSocket版本有区别。php jetty netty ruby Kaazing nginx python Tomcat Django erlang

netty .net等语言均可以用来实现支持WebSocket的服务器。websocket api在浏览器端的广泛实现似乎只是一个时间问题了, 值得注意的是服务器端没有标准的api, 各个实现都有自己的一套api, 并且tcp也没有类似的提案, 所以使用websocket开发服务器端有一定的风险.可能会被锁定在某个平台上或者将来被迫升级。

游客


返回顶部