如何使WebSocket通信到APU与UI?- Sock JS、STOMP异步通信

564 阅读4分钟

沿着SOCK JS的HTTP升级

使用STOMP客户端的Apache Kafka PUSH范式在行动

STOMP客户端、SOCK JS和WebSocket架构

范围

这篇文章是为了帮助初学者和中级人士了解WebSocket双向的全双工 通信到 API(应用程序接口)和 UI(用户界面)的通信,并附有代码示例。
对以下概念进行了解释。
a.WebSocket, HTTP升级
b.Sock JS, JavaScript
libraryc.STOMP客户端(Simple Text-Oriented Messaging Protocol)
d.Kafka异步PUSH范式

先决条件

a. kafka_2.13-2.8.
0b.Offset Explorer 2.0(Kafka工具)
c.Spring boot

什么是WebSocket?与HTTP相比,我们看到了哪些优势?

HTTP 编码是同步的,并且是基于 拉动 范例。在PULL范式中,客户必须发起请求 ,并轮询服务器以接收新数据,这是半双工和单向的**。
一种新的TCP(传输控制协议)** 每次建立连接时,都需要一个新的TCP传输控制协议。

WebSocket 是全双工和双向的。这意味着客户端或服务器可以发起一个请求,通信可以在浏览器和服务器之间的持续连接中平行流动,直到其中任何一方断开并关闭连接。
与http相反,websocket支持异步通信,允许服务器基于PUSH范式发起请求。服务器可以发起请求并向客户推送实时信息。
最初的http连接被 升级为websocket,并用于单个 TCP会话_中的_所有未来通信_。与 http相比,websocket的数据交换规模要小得多**。
**HTTP每次发出请求时都会携带开销,并将头文件和cookies传输到服务器,这增加了_延时。
websocket提供了一个持久的低延迟连接。

这篇文章是如何组织的?它分享了哪些组件和产品来解释?

让我们了解一下设计:-
一个简单的浏览器客户端将通过Sock JS(一个JavaScript库)建立websocket连接。浏览器发起的请求将升级到websocket,以提供一个持久的、全双工的、双向的连接。Sock JS客户端将尝试使用最佳的可用传输方式进行连接,即[websocket、xhr轮询、xhr流]。
STOMP(Simple Text-Oriented Messaging Protocol)在websocket协议的基础上发挥作用,向服务器发起请求,同时订阅一个内存中的消息代理。在这个设计中,数据由Kafka Listener从Kafka Topic接收并异步发送到内存中的消息代理。由于STOMP客户端已经订阅了内存消息代理,它将收到数据并显示在客户端。
来自客户端的数据传输和来自服务器的数据接收是异步进行的。

让我们来看看这个代码,了解它是如何工作的?

a.JavaScript代码

JavaScript代码--连接和订阅

上述JavaScript代码调用函数connect(),启动了http连接并升级到websocket。传递给Sock JS构造函数的端点是一个已注册的STOMP端点,支持Sock JS与websocket通信。STOMP客户端订阅了一个内存中的消息代理,以接收由Kafka在服务器端推送的异步数据。

b.Spring boot配置类

配置代码显示了STOMP端点的注册和启用内存中消息代理。

STOMP注册和启用内存中的消息代理

_c.Spring boot Kafka Listener类
_
Kafka Listener将异步接收来自Kafka Topic的数据,并将收到的数据推送给STOMP客户端订阅的端点,该端点是内存中的消息代理,如下所示。

Kafka监听器

让我们运行该应用程序。浏览器到服务器

In this application the following are performed:-
1.启动Zookeeper和Kafka broker

在2181端口运行的Zookeeper实例

在9092端口运行的Kafka Broker 0

2.启动Offset Explorer工具,向Kafka Topic发送消息

向Kafka代理发送消息--键/值对

3.启动Spring boot应用程序

收到来自Kafka Broker的消息

4.在开发工具模式下启动浏览器,查看连接 升级 到WebSocket

模式。开发者工具 - 连接UPGRADE

5.查看由STOMP客户端订阅的从Kafka Topic收到的消息

PUSH通知 - 从Kafka代理处收到的异步消息

总结

通过本文的总结,我们了解了WebSocket与Sock JS和STOMP客户端的定义和使用优势。应用设计和实现帮助我们理解了简单的代码片段,它启动了websocket连接,并从Kafka Topic异步接收数据,发布到客户端的用户界面上。