简介
本文档全面介绍WebSocket连接,以便在进行故障排除时,能够全面了解底层进程。
先决条件
要求
本文档没有任何特定的要求。
组件 已使用
本文档中的信息基于以下软件和硬件版本:
本文档中的信息都是基于特定实验室环境中的设备编写的。本文档中使用的所有设备最初均采用原始(默认)配置。如果您的网络处于活动状态,请确保您了解所有命令的潜在影响。
背景信息
Web套接字是客户端和服务器之间的持久连接。
Web插槽
术语“持久连接”是指什么?
这意味着一旦客户端和服务器之间建立连接,客户端和服务器就可以随时发送和/或接收数据。
这是双向全双工连接。
服务器不必等待客户端请求回推任何数据。
同样,客户端也不必每次向服务器发送任何新数据时都创建一个新连接。
Web Socket连接主要用于需要实时数据更新的应用。
例如,股票交易应用、消息传送应用,在我们的案例中是Cisco Finesse。
WebSockets如何工作?
请考虑:
HTTP
- 发生TCP连接(三次握手)。
- 然后,客户端发送HTTP请求。
- 服务器发送HTTP响应。
- 在一个请求响应周期后,TCP连接关闭。
- 同样,对于新的HTTP请求,首先会建立TCP连接。
HTTP 1.0 — 在每个请求响应后,TCP握手会再次启动,以获取另一个HTTP请求响应。
HTTP 1.1 — 此连接工作正常,因为您可以发送和接收数据,然后关闭连接。
同样,这不适用于实时应用,因为服务器可以发送一些数据,即使客户端没有请求数据。因此、这种模式是无效的。
HTTP问题
问题始于实时系统。
对于需要实时更新的网站,每次从服务器获取更新都很难发送HTTP请求,并且会占用大量带宽,导致过载。
为了解决这个问题,使用了一种称为Polling的HTTP机制。
Short Poll — 在为请求和响应设置短固定计时器时实施。例如,05秒或1秒,具体取决于实施情况。
如果另一端没有更新,则在该时间段内您可能会收到可能会浪费资源的空响应。
长轮询 — 它以某种方式克服了短轮投票,但仍有固定时间等待响应。
如果在比短期轮询更长时间段内没有响应但仍已确定,则再次请求超时。
因此,轮询并不是解决此问题的最佳方法。
为此,另一种使用的方法称为SSE。
SSE
服务器发送的事件
这样,服务器和客户端之间就有一个单向连接,服务器可以通过该连接在任何点向客户端发送数据。
这里需要注意的是,它是单向连接,这意味着只有服务器可以向客户端发送数据,而不能反过来。
使用案例的示例是:从服务器到客户端的批量通知或更新。例如,新闻实时更新、Instagram live等等。
这对于涉及实时更新和消息传送的应用程序不太有效。
Web套接字连接是一种持久双向全双工连接。
这可以是服务器和客户端之间的电话呼叫,其中任何一方可以随时与另一方通话。
WebSocket操作
- 要建立Websocket连接,客户端将发送带有升级或更新报头的HTTP握手请求。
- 这表示客户端正在向服务器说明,此消息现在通过HTTP,但从现在起,它将转到Websocket连接。
- 然后,服务器使用HTTP 101响应进行响应,这意味着sit正在切换协议响应。
- 之后,建立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
PLAIN
http://jabber.org/protocol/caps" hash="sha-1" node="
https://www.igniterealtime.org/projects/openfire/" ver="k3mOuil8afx3OTZxYy6yxLmFsok="/>
Request - auth
YWRtaW5pc3RyYXRvckB1Y2N4cHViLnByYWJoYXQuY29tAGFkbWluaXN0cmF0b3IAMTIzNA==
Response
Request – XMPP Bind Bind request to Bind the resource which in this case is desktop with a jabber id
desktop
Response – XMPP Bind where User ID is given a jabber id
administrator@uccxpub.prabhat.com/desktop
administrator@uccxpub.prabhat.com/desktop
Presence request
Presence response
http://jabber.org/protocol/caps" hash="sha-1" node="
http://www.igniterealtime.org/projects/smack" ver="NfJ3flI83zSdUDzCEICtbypursw=">
http://jabber.org/protocol/caps" hash="sha-1" node="
http://www.igniterealtime.org/projects/smack" ver="NfJ3flI83zSdUDzCEICtbypursw=">
PUBSUB request – Requesting to subscribe the user to the pubsub node so that all the events on the user are monitored.
Response – user subscribed.
http://jabber.org/protocol/pubsub">
PUBSUB request – Requesting to subscribe the Team to the pubsub node so that all the events on the team are monitored.
Response – Team subscribed
http://jabber.org/protocol/pubsub">
相关信息