WebSocket、HTTP的特点区别、应用场景,具体使用,以及SpringBoot中WebSocket消息推送服务的实现

    最近的项目开发中,需要增加web端的消息推送服务,从而实现平台消息通知的可靠传达,经过一番调研,最终确定使用WebSocket来实现这个服务,顺便也做下归纳。

    WebSocket 是 HTML5 开始提供的一种在单个 TCP 连接上进行全双工通讯的协议,它使得客户端和服务器之间的数据交换变得更加简单,允许服务端主动向客户端推送数据。在 WebSocket API 中,浏览器和服务器只需要完成一次握手,两者之间就直接可以创建持久性的连接,并进行双向数据传输。
 WebSocket提供使用一个TCP连接进行双向通讯的机制,包括网络协议和API,从而可以取代传统开发模式中网页和服务器采用HTTP轮询进行双向通讯的机制。
 本质上来说,WebSocket是不限于HTTP协议的,但是由于现存大量的HTTP基础设施,代理,过滤,身份认证等等,WebSocket借用HTTP和HTTPS的端口。由于使用HTTP的端口,因此TCP连接建立后的握手消息是基于HTTP的,由服务器判断这是一个HTTP协议,还是WebSocket协议。 WebSocket连接除了建立和关闭时的握手,数据传输和HTTP没丝毫关系了。
WebSocket的特点

  建立在 TCP 协议之上,WebSocket 是一个典型的应用层协议,服务器端的实现比较容易。
  与 HTTP 协议有着良好的兼容性。默认端口也是80和443,并且握手阶段采用 HTTP 协议,因此握手时不容易屏蔽,能通过各种 HTTP 代理服务器。
  数据格式比较轻量,性能开销小,通信高效。
  可以发送文本,也可以发送二进制数据。
  没有同源限制,客户端可以与任意服务器通信。
  协议标识符是ws(如果加密,则为wss),服务器网址就是 URL。

WebSocket的原理

  客户端浏览器首先要向服务器发起一个 HTTP 请求,这个请求和通常的 HTTP 请求不同,包含了一些附加头信息,其中附加头信息"Upgrade: WebSocket"表明这是一个申请协议升级的 HTTP 请求,服务器端解析这些附加的头信息然后产生应答信息返回给客户端,客户端和服务器端的 WebSocket连接就建立起来了,客户端和服务器端就可以通过TCP连接直接交换数据自由的传递信息,,当你获取 Web Socket 连接后,你可以通过 send() 方法来向服务器发送数据,并通过 onmessage 事件来接收服务器返回的数据。这个连接会持续存在直到客户端或者服务器端的某一方主动的关闭连接。


WebSocket 事件
open  Socket.onopen 连接建立时触发
message Socket.onmessage  客户端接收服务端数据时触发
error Socket.onerror  通信发生错误时触发
close Socket.onclose  连接关闭时触发

应用场景

 1、 消息推送

  2、多用户交互

  3、数据展示

使用WebSocket的步骤

创建WebSocket连接对象从而建立连接

var socket = new WebSocket("ws://www.example.com/socketserver", "protocolOne");

向服务端发送数据/接收服务端数据

socket.send("Here's some text that the server is urgently awaiting!");

socket.onmessage = function (event) {
  console.log(event.data);
}

关闭连接

socket.close();

SpringBoot中使用WebSocket实现消息的可靠投递与数据的实时展示

    在之后的篇章中,我将逐步展示WebSocket在IM应用系统、消息推送服务以及实时数据分析项目中的应用

    在下一篇中,我将介绍在项目中实现WebSocket消息的可靠传递

发布了117 篇原创文章 · 获赞 17 · 访问量 8万+

猜你喜欢

转载自blog.csdn.net/Jack__iT/article/details/102133709