Qt之WebSockets

简介: 简述WebSocket 是一个基于 Web 的协议,旨在使 client 应用程序和远程主机之间进行双向通信。如果最初的握手成功,则两个实体可以来回发送数据。WebSocket 是通过用更少的网络延迟和最小数据交换来努力获取实时数据的应用程序解决方案。简述优点工作原理使用方式典型用例Qt WebSockets 的角色Qt WebSockets 与

简述

WebSocket 是一个基于 Web 的协议,旨在使 client 应用程序和远程主机之间进行双向通信。如果最初的握手成功,则两个实体可以来回发送数据。WebSocket 是通过用更少的网络延迟和最小数据交换来努力获取实时数据的应用程序解决方案。

优点

Qt WebSockets 使你能够构建 WebSocket 应用程序。它提供了一个 WebSocket 协议实现,由 IETF(Internet Engineering Task Force)提供,作为双向沟通的更好的选择使用现有 Web 基础架构。

历史上,需要双向沟通或推送通知的 Web 应用程序必须使用基于 HTTP 的解决方案之一,这些解决方案使用了不同的技术,例如:轮询、长轮询和流式查询,为了克服不支持这种用例的 HTTP 协议的局限性。其结果是:高网络延迟、不必要的数据交换、以及陈旧或过时数据。WebSocket 由 IETF 的帮助在很大的程度上克服了这些问题。

工作原理

这里写图片描述

正如上图所示,基于 WebSocket 的解决方案包括 client 和 server。本地 client 对于 WebSocket 的支持在大多数流行的 Web 浏览器中可用,例如:Google Chrome、Internet Explorer、Safari 等等。服务器端支持 WebSocket 使其成为一个实现双向通信的完整解决方案。任何支持原生 WebSocket 的浏览器应该可以使用 HTML5 WebSocket API 来运行一个简单的 HTML 和基于 JavaScript 的 client 应用程序。

一个 WebSocket 连接始于一个初始 HTTP 兼容的握手,这确保向后兼容性,使得 WebSocket 连接可以共用默认的 HTTP(80)和 HTTPS(443)端口。成功握手,连接便会打开用于数据交换,直到两个实体中的一个结束连接。

WebSocket 协议使用 ws: 和 wss: URL 协议,以分别代表不安全和安全的 WebSocket 请求。在初始握手时,如果检测到一个代理服务器,该协议试图通过向代理发出一个 HTTP CONNECT 语句来建立隧道。处理代理隧道的方法不管请求类型,尽管它被证明在安全连接中使用 TLS (Transport Layer Security)更好。

使用方式

要链接 WebSockets 模块,需要在 qmake.pro 文件中添加:

QT += websockets

在应用程序中使用此模块,使用以下 include 声明:

#include <QtWebSockets/QtWebSockets>

典型用例

WebSocket 最适合的场景:

  • 呈现的数据必须是最新的
  • 较低的网络延迟和最小的数据交换至关重要

例如,使用传统方法难以实现的一些应用程序:即时通讯、在线游戏、在线股票交易等等。

Qt WebSockets 的角色

Qt WebSockets 模块提供了一系列 API 来开发基于 WebSocket 的 server 和 client 应用程序。可以使用这些 API 的一个典型例子:一个提供了股票数据的 server 应用程序,和一个注册推送通知的 client,当有股票的价格变化时。

该模块提供了 C++ 和 QML 版本的 API,使 Qt 应用程序作为一个处理 WebSocket 请求的 server,或者一个可以使用从 server 接收到数据的 client,或两者兼而有之。可根据自己的需求选择合适的方式。

Qt WebSockets 与 Cloud Services

client 应用程序通常依赖于外部服务的数据。这些服务提供者大多数不支持 WebSocket,所以你最终需要开发一个感知 WebSocket 的 server 应用程序来填补这一缺口。可以在一个企业的 WebSocket 网关服务(例如:云服务)运行 server,避免了维护托管这样一个服务所需的必要的基础设施的麻烦。

大多数云服务提供了一个平台作为一个后台服务(PaaS),使 server 应用程序部署并且运行在云上。client 应用程序可以使用一个 WebSocket URL 连接到运行的 server 并且接收数据。

相关信息

目录
相关文章
|
4月前
|
小程序 网络安全 Windows
swoole(二)ws与wss的区别
关于ws与wss的区别这里简单的说一下我目前的见解。 如果你有更多的见解欢迎在下方留言讨论。 最简单的理解就是: 服务器上服务端用的是:websocket协议(支持客户端的ws访问) 服务器上服务端用的是:websocket协议+TLS(支持客户端的wss访问) 客户端上用的是: ws协议或者wss协议 Wss与ws其实就和http与https的关系,wss需要验证域名证书,ws不需要验证域名证书。 这个其实都不重要。我们在开发的时候关系不是很大。 下边的才是我要说的重点: Ws链接可以使用IP+端口号的形式访问。 Wss链接只能使用域名的形式访问,因为服务器端需要通过域名来找对应的ssl证书
193 0
|
23天前
|
XML JSON JavaScript
推荐一个比较好用的c++版本http协议库-cpp-httplib
推荐一个比较好用的c++版本http协议库-cpp-httplib
37 1
|
4月前
|
存储 JSON 前端开发
QT Http协议
QT Http协议
55 0
|
7月前
vs2022配置Qt6
vs2022配置Qt6
96 1
|
11月前
|
安全 C语言 C++
Qt: 一个适用于Qt的httpserver 开源库介绍
Qt: 一个适用于Qt的httpserver 开源库介绍
672 0
|
11月前
Qt:connect的使用【一】
Qt:connect的使用【一】
177 0
|
编译器 C语言
Qt5.12.2添加mqtt模块
Qt5.12.2添加mqtt模块 下载 mqtt Qt 子模块 使用 Qt 编译模块并install 生成动态库
181 0
Qt5.12.2添加mqtt模块
|
C语言
Qt使用Gsoap
Qt使用Gsoap
83 0
|
网络协议 前端开发 安全
Go 实现 WebSockets:1. 什么是 WebSockets
日常工作中,在不刷新页面的情况下发送消息并获得即时响应是我们认为理所当然的事情。但在过去,启用实时功能对开发人员来说是一个真正的挑战。开发者社区从 HTTP 长轮询和 AJAX 走过了漫长的道路,终于找到了构建真正实时应用程序的解决方案。
Go 实现 WebSockets:1. 什么是 WebSockets
|
Python
Python: flask-socketio使用Websocket协议进行通讯
Python: flask-socketio使用Websocket协议进行通讯
200 0