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 并且接收数据。

相关信息

目录
相关文章
|
1月前
|
编解码 开发框架 监控
Qt搭建RTSP服务器
一、项目背景 随着物联网技术不断发展,视频监控系统在各个领域的应用越来越广泛。其中,RTSP(Real Time Streaming Protocol)是一种常用的流媒体传输协议,可以实现对实时音视频数据的传输和播放。为了实现视频监控系统的网络化和智能化,需要开发一个基于RTSP协议的视频流服务器,能够接收前端设备的视频流,并提供RTSP协议的服务,方便客户端进行实时的视频浏览、回放等操作。 在开发过程中,为了提高开发效率、减少开发难度和成本,同时具备良好的可扩展性和可维护性,我选择使用Qt和Live555库来搭建RTSP服务器。Qt是一个跨平台的C++应用程序开发框架,具有完善的GUI界
47 0
|
4月前
|
安全 C语言 C++
Qt: 一个适用于Qt的httpserver 开源库介绍
Qt: 一个适用于Qt的httpserver 开源库介绍
363 0
|
4月前
Qt:connect的使用【一】
Qt:connect的使用【一】
|
7月前
|
编译器 C语言
Qt5.12.2添加mqtt模块
Qt5.12.2添加mqtt模块 下载 mqtt Qt 子模块 使用 Qt 编译模块并install 生成动态库
Qt5.12.2添加mqtt模块
|
8月前
|
消息中间件 JavaScript 前端开发
Paho JavaScript Client 基于websocket实现 mqtt客户端
Paho JavaScript Client 基于websocket实现 mqtt客户端
121 0
|
11月前
|
网络协议 前端开发 安全
Go 实现 WebSockets:1. 什么是 WebSockets
日常工作中,在不刷新页面的情况下发送消息并获得即时响应是我们认为理所当然的事情。但在过去,启用实时功能对开发人员来说是一个真正的挑战。开发者社区从 HTTP 长轮询和 AJAX 走过了漫长的道路,终于找到了构建真正实时应用程序的解决方案。
Go 实现 WebSockets:1. 什么是 WebSockets
|
应用服务中间件 网络安全 nginx
Nginx配置WebSocket 【支持wss与ws连接】
Nginx配置WebSocket 【支持wss与ws连接】
2656 0
|
Python
Python: flask-socketio使用Websocket协议进行通讯
Python: flask-socketio使用Websocket协议进行通讯
149 0
|
JavaScript
electron中使用ws
electron中使用ws
项目实战:Qt编译Qt库以及使用C#调用Qt库,并实现C#集成Qt的tcp客户端
项目实战:Qt编译Qt库以及使用C#调用Qt库,并实现C#集成Qt的tcp客户端
项目实战:Qt编译Qt库以及使用C#调用Qt库,并实现C#集成Qt的tcp客户端
相关产品
云迁移中心
推荐文章
更多