目录

简介

先决条件

要求

使用的组件

背景信息

Web插槽

WebSockets如何工作？

HTTP

HTTP问题

SSE

WebSocket操作

WebSocket调试

相关信息

简介

本文档全面介绍WebSocket连接，以便在进行故障排除时，能够全面了解底层进程。

先决条件

要求

本文档没有任何特定的要求。

组件 已使用

本文档中的信息基于以下软件和硬件版本：

- 思科Finesse

- UCCX

本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始（默认）配置。如果您的网络处于活动状态，请确保您了解所有命令的潜在影响。

背景信息

Web套接字是客户端和服务器之间的持久连接。

Web插槽

术语“持久连接”是指什么？

这意味着一旦客户端和服务器之间建立连接，客户端和服务器就可以随时发送和/或接收数据。

这是双向全双工连接。

服务器不必等待客户端请求回推任何数据。

同样，客户端也不必每次向服务器发送任何新数据时都创建一个新连接。

Web Socket连接主要用于需要实时数据更新的应用。

例如，股票交易应用、消息传送应用，在我们的案例中是Cisco Finesse。

WebSockets如何工作？

请考虑：

HTTP

1. 发生TCP连接（三次握手）。

2. 然后，客户端发送HTTP请求。

3. 服务器发送HTTP响应。

4. 在一个请求响应周期后，TCP连接关闭。

5. 同样，对于新的HTTP请求，首先会建立TCP连接。

HTTP 1.0 — 在每个请求响应后，TCP握手会再次启动，以获取另一个HTTP请求响应。

HTTP 1.1 — 此连接工作正常，因为您可以发送和接收数据，然后关闭连接。

同样，这不适用于实时应用，因为服务器可以发送一些数据，即使客户端没有请求数据。因此、这种模式是无效的。

HTTP问题

问题始于实时系统。

对于需要实时更新的网站，每次从服务器获取更新都很难发送HTTP请求，并且会占用大量带宽，导致过载。

为了解决这个问题，使用了一种称为Polling的HTTP机制。

Short Poll — 在为请求和响应设置短固定计时器时实施。例如，05秒或1秒，具体取决于实施情况。

如果另一端没有更新，则在该时间段内您可能会收到可能会浪费资源的空响应。

长轮询 — 它以某种方式克服了短轮投票，但仍有固定时间等待响应。

如果在比短期轮询更长时间段内没有响应但仍已确定，则再次请求超时。

因此，轮询并不是解决此问题的最佳方法。

为此，另一种使用的方法称为SSE。

SSE

服务器发送的事件

这样，服务器和客户端之间就有一个单向连接，服务器可以通过该连接在任何点向客户端发送数据。

这里需要注意的是，它是单向连接，这意味着只有服务器可以向客户端发送数据，而不能反过来。

使用案例的示例是：从服务器到客户端的批量通知或更新。例如，新闻实时更新、Instagram live等等。

这对于涉及实时更新和消息传送的应用程序不太有效。

Web套接字连接是一种持久双向全双工连接。

这可以是服务器和客户端之间的电话呼叫，其中任何一方可以随时与另一方通话。

WebSocket操作

1. 要建立Websocket连接，客户端将发送带有升级或更新报头的HTTP握手请求。

1. 这表示客户端正在向服务器说明，此消息现在通过HTTP，但从现在起，它将转到Websocket连接。

2. 然后，服务器使用HTTP 101响应进行响应，这意味着sit正在切换协议响应。

3. 之后，建立Websocket连接。

现在，服务器和客户端可以使用该连接随时相互传输数据。

WebSocket调试

此时，如果您登录Finesse客户端并看到网络调试，它将显示为：

方法- GET

域 — 服务器名称

文件 — /WS/

INITIATOR - Openfire.js - websocket

检查请求和响应：

请求

GET

方案:wss

主机：uccxpub.prabhat.com:8445

文件名： /ws/

地址：uccx服务器的IP

状态:101

交换 协议

版本HTTP/1.1

响应报头

连接：升级

升级：WebSocket

Request – open

Response

http://etherx.jabber.org/streams'>" jabber.org="" rotocol="" aps="" target="_blank" rel="noopener nofollow noreferrer">

http://jabber.org/protocol/caps" hash="sha-1" node="

https://www.igniterealtime.org/projects/openfire/" ver="k3mOuil8afx3OTZxYy6yxLmFsok="/

Request - auth Response Request – XMPP Bind Bind request to Bind the resource which in this case is desktop with a jabber id Response – XMPP Bind where User ID is given a jabber id Presence request Presence response

PUBSUB request – Requesting to subscribe the user to the pubsub node so that all the events on the user are monitored.