Qt WebSockets 概述

Qt WebSockets 使您能够构建 WebSocket 感知应用程序。它提供 WebSocket 协议的实现,该协议作为使用现有 Web 基础设施双向通信的更优替代,由 IETF (Internet 工程任务组) 提供。

过去,需要双向通信或推送通知的 Web 应用程序必须使用基于 HTTP 的某一可用解决方案。这些解决方案使用诸如轮询、长轮询及流的不同技术,以克服 HTTP 协议的限制性 (HTTP 协议并不是为这种用例而设计的)。这导致高网络延迟、不必要的数据交换、及陈旧或旧的数据。由 IETF 提供的 WebSocket 在很大程度上有助于克服这些问题。

它如何工作?

如图所示,基于 WebSocket 的解决方案由客户端侧和服务器侧组成。WebSocket 支持的本机客户端侧可用于大多数流行 Web 浏览器 (如 Google Chrome、Internet Explorer、Safari 等)。WebSocket 支持的服务器侧使之成为完整解决方案,启用双向通信。任何带有本机 WebSocket 支持的浏览器都应该允许您使用 HTML5 WebSocket API 运行基于 HTML 和 JavaScript 的简单客户端应用程序。

WebSocket 连接从初始 HTTP 兼容握手开始,确保向后兼容以便 WebSocket 连接可以共享默认 HTTP (80) 和 HTTPS (443) 端口。握手成功后,连接打开以进行数据交换,直到 2 实体之一结束连接。

WebSocket 协议使用 ws :和 wss :URL 方案分别表示不安全和安全 WebSocket 请求。在初始握手期间,若检测到代理服务器,协议会试着建立隧道通过发出 HTTP CONNECT 语句给代理。使用隧道方式处理代理不管请求类型,尽管它被证实在采用 TLS (传输层安全) 的安全连接中工作得更好。

典型使用案例

WebSocket 最适合以下情景:

  • 呈现的数据必须是最新的,
  • 低网络延迟和关键性最小数据交换。

难以使用传统方式达成这些的一些应用程序范例:即时消息、在线游戏、在线股票交易、等等。

Qt WebSockets 的作用

Qt WebSockets 模块提供开发基于 WebSocket 的服务器和客户端的应用程序 API。可以使用这些 API 的范例是提供股票数据的服务器应用程序,及当少数股票价格改变时注册用于推送通知的客户端应用程序。

模块同时提供 C++ 和 QML 版本的 API,因此可以选取适合需要的替代。

Qt WebSockets 与云服务

客户端应用程序通常依赖外部数据服务。这些服务提供商大多还不支持 WebSocket,因此最终需要开发 WebSocket 感知服务器应用程序以弥合差距。可以运行服务器在企业 WebSocket 网关服务 (如:云服务),以避免维护托管这种服务要求的必要基础设施的麻烦。

大多数云服务都提供 PaaS (平台即服务) 后端,使在云上能够部署和运行服务器应用程序实例。客户端应用程序可以连接到正在运行的服务器使用 WebSocket URL 并接收数据。