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 模块提供开发基于 WebSocket 的服务器和客户端的应用程序 API。可以使用这些 API 的范例是提供股票数据的服务器应用程序,及当少数股票价格改变时注册用于推送通知的客户端应用程序。
模块同时提供 C++ 和 QML 版本的 API,因此可以选取适合需要的替代。
客户端应用程序通常依赖外部数据服务。这些服务提供商大多还不支持 WebSocket,因此最终需要开发 WebSocket 感知服务器应用程序以弥合差距。可以运行服务器在企业 WebSocket 网关服务 (如:云服务),以避免维护托管这种服务要求的必要基础设施的麻烦。
大多数云服务都提供 PaaS (平台即服务) 后端,使在云上能够部署和运行服务器应用程序实例。客户端应用程序可以连接到正在运行的服务器使用 WebSocket URL 并接收数据。