QT - WebSockets
QT - WebSockets
WebSocket是基于Web的协议,旨在在客户端应用程序和远程主机之间实现双向通信。如果初始握手成功,它将使两个实体来回发送数据。WebSocket是应用程序通过较少的网络延迟和最少的数据交换来获取实时数据源的解决方案。
Qt WebSockets模块提供了C ++和QML接口,这些接口使Qt应用程序充当可以处理WebSocket请求的服务器,可以充当从服务器接收的数据的客户端的客户端,或者两者都可以。
入门
要包括模块类的定义,请使用以下指令:
#include <QtWebSockets/QtWebSockets>
要将QML类型导入到您的应用程序中,请在.qml文件中使用以下import语句:
import QtWebSockets 1.14
要链接该模块,请将以下行添加到您的qmake .pro文件中:
QT += websockets
Qt WebSockets概述
Qt WebSockets使您能够构建支持WebSocket的应用程序。它提供了WebSocket协议的实现,该协议由IETF(Internet工程任务组)提供,是使用现有Web基础结构进行双向通信的更好替代方案。
从历史上看,需要双向通信或推送通知的Web应用程序必须使用可用的基于HTTP的解决方案。这些解决方案采用了诸如轮询,长轮询和流传输之类的不同技术来克服HTTP协议的局限性,这些协议并非针对此类用例而设计。这导致高网络延迟,不必要的数据交换以及陈旧或旧数据。IETF 的WebSocket产品有助于在很大程度上克服这些问题。
它是如何工作的?
image如您在图片表示中所看到的,基于WebSocket的解决方案由客户端和服务器端组成。大多数流行的Web浏览器(例如Google Chrome,Internet Explorer,Safari等)都提供对WebSocket的本地客户端支持。WebSocket的服务器端支持使其成为完整的解决方案,从而实现了双向通信。任何具有本地WebSocket支持的浏览器都应允许您使用HTML5 WebSocket API 运行基于HTML和JavaScript的简单客户端应用程序。
网页套接字WebSocket连接开始于初始HTTP兼容握手,这保证向后兼容性,使得WebSocket连接可以共享默认HTTP(80)和HTTPS(443)端口。成功握手后,连接将打开以进行数据交换,直到两个实体之一结束连接。
网页套接字WebSocket协议使用ws
:和wss
:URL方案分别代表不安全和安全的WebSocket请求。在初始握手期间,如果检测到代理服务器,则协议会通过向HTTP CONNECT
代理发布一条语句来尝试建立隧道。尽管已证明在安全连接中使用TLS(传输层安全性)可以更好地工作,但无论请求类型如何,都使用隧道方法来处理代理。
典型用例
WebSocket最适合以下情况:
- 实时更新数据
- 低网络延迟和最少的数据交换至关重要。
我们努力使用传统方法来实现这些目标的一些示例应用程序例如:即时消息传递,在线游戏,在线股票交易等。
Qt WebSockets的作用
Qt WebSockets模块提供API,以开发基于WebSocket的服务器和客户端应用程序。可以使用这些API的示例是提供股票数据的服务器应用程序,以及当少数股票价格发生变化时注册推送通知的客户端应用程序。
该模块提供API的C ++和QML版本,因此您可以选择适合您需要的替代方法。
带有云服务的Qt WebSockets
客户端应用程序通常依赖于外部服务来获取数据。这些服务提供商中的大多数还不支持WebSocket,因此最终需要开发可可感知WebSocket(WebSocket-aware)的服务器应用程序以弥合差距。您可以在企业WebSocket网关服务(例如云服务)上运行服务器,从而避免了维护承载此类服务所需的必要基础结构的麻烦。
大多数云服务都提供平台即服务(PaaS)后端,该后端可在云上部署和运行服务器应用程序的实例。客户端应用程序可以使用WebSocket URL 连接到正在运行的服务器并接收数据。
相关信息
WebSocket QML Type
Properties
-
active : bool
设置为true时,将使用给定的URL与服务器建立连接。设置为false时,连接关闭。默认值为false。 -
errorString: QString
包含对最后发生的错误的描述。如果未发生任何错误,则此字符串为空。 -
status: Status
WebSocket的状态。状态可以具有以下值:- WebSocket.Connecting
- WebSocket.Open
- WebSocket.Closing
- WebSocket.Closed
- WebSocket.Error
-
url: QUrl
要连接的服务器网址。网址必须具有以下两种方案之一:ws://或wss://。如果未提供,则使用ws://。
Signals
-
binaryMessageReceived(message)
接收到二进制消息时将发出此信号。消息包含收到的字节。这个信号是在Qt 5.8中引入的。 -
statusChanged(status)
WebSocket的状态更改时,将发出此信号。该状态参数提供的当前状态。
参见WebSocket :: status。 -
textMessageReceived(message)
收到文本信息时发出此信号。消息包含收到的字节。
Methods
- void sendBinaryMessage(message)
将二进制消息发送到服务器。此方法在Qt 5.8中引入。 - void sendTextMessage(message)
将文本消息发送到服务器。
WebSocketServer QML Type
Properties
-
accept : bool
设置为true以在服务器侦听时接受传入的客户端连接。设置为false时,拒绝传入连接。默认情况下,接受连接。 -
errorString: QString
字符串化的错误消息,以防发生错误。 -
host : QString
服务器的主机地址。默认情况下,使用本地主机。 -
listen: bool
服务器应侦听客户端连接时设置为true,否则设置为false。设置为true时,服务器将侦听主机和端口定义的指定url;如果accept为true,则接受传入的客户端连接。否则,服务器将关闭。默认情况下,服务器不监听。 -
name: QString
在HTTP握手阶段使用的服务器名称。 -
port: int
该服务器正在侦听的端口。该值必须在0-65535的范围内。
默认情况下,将自动选择端口。 -
url : QUrl
客户端WebSocket可以连接的服务器URL 。url使用ws://方案,并包括服务器侦听的端口和服务器的主机地址。
Signals
-
clientConnected(webSocket)
当客户端连接到该服务器时,将发出此信号。webSocket是新创建的WebSocket