Qt之WebSockets

简述

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

  • 简述
  • 优点
  • 工作原理
  • 使用方式
  • 典型用例
  • Qt WebSockets 的角色
  • Qt WebSockets 与 Cloud Services
  • 相关信息

优点

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

相关信息

时间: 2024-09-20 20:58:38

Qt之WebSockets的相关文章

《Qt 实战一二三》

简介 "我们来自Qt分享&&交流,我们来自Qt Quick分享&&交流",不管你是笑了,还是笑了,反正我们是认真的.我们就是要找寻一种Hold不住的状态,来开始每一天的点滴分享,我们是一个有激情,有态度的部队. 但是我们还是我们,我们只是多了一份责任.古语有云:"不积跬步无以至千里,不积小流无以成江海",所以每一个伟大事务的产生都不是一蹴而就的.现在我们要立足眼下,把第一站放在地球,"<Qt 实战一二三>&quo

关于Qt

什么是Qt Qt是一个针对桌面.嵌入式.移动设备的一个跨平台的应用程序开发框架,支持的平台包括Linux.OS X.Windows.VxWorks.QNX.Android.iOS.BlackBerry(黑莓).Sailfish OS(旗鱼操作系统)等. Qt 1991年由Trolltech-奇趣科技(成立于1994年)开发,2008年,Trolltech被Nokia收购,2012年,Qt被Digia收购. Qt是基于C++编写的框架,它既可以开发GUI程序,也可用于开发非GUI程序,比如控制台工

QT中的QInputDialog的小例子

其实这断代码没什么优秀之处,贴出来主要为为了方便自己和他人,因为以后如果用到这一块的话,这些代码可能能够直接拿过来用. InpugDialog.h头文件: #ifndef INPUGDIALOG_H #define INPUGDIALOG_H #include <QtGui> #include "ui_inpugdialog.h" class InpugDialog : public QDialog { Q_OBJECT public: InpugDialog(QWidge

vs2008-VS搭配QT,x64平台下为挖三维编的dll,怎么调试

问题描述 VS搭配QT,x64平台下为挖三维编的dll,怎么调试 VS搭配QT,x64平台下为挖三维编的dll,怎么调试?新手,试过用挖三维打开调试,但是没看到界面在哪里,请懂得QT的前辈回答,谢谢! 解决方案 https://github.com/Vaa3D/Vaa3D_Wiki/wiki/Build-Vaa3D-on-Linux

qt如何实现 滑动屏幕的效果

问题描述 qt如何实现 滑动屏幕的效果 用了qtscrollArea做了只能靠移动滑动条来实现滑动的效果,怎么样才能做到用触摸屏实现滑动效果,而不是靠滑动条.求大神指点. 解决方案 不要依赖于 qtscrollArea,自己做滑动效果,这样就可以不依靠滑动条.

[Qt教程] 第19篇 2D绘图(九)图形视图框架(上)

[Qt教程] 第19篇 2D绘图(九)图形视图框架(上) 楼主  发表于 2013-5-4 15:26:20 | 查看: 1798| 回复: 26 图形视图框架(上) 版权声明 导语 在前面讲的基本绘图中,我们可以自己绘制各种图形,并且控制它们.但是,如果需要同时绘制很多个相同或不同的图形,并且要控制它们的移动,检测它们的碰撞和叠加:或者我们想让自己绘制的图形可以拖动位置,进行缩放和旋转等操作.实现这些功能,要是还使用以前的方法,那么会十分困难.解决这些问题,可以使用Qt提供的图形视图框架.  

[Qt教程] 第20篇 2D绘图(十)图形视图框架(下)

[Qt教程] 第20篇 2D绘图(十)图形视图框架(下) 楼主  发表于 2013-5-4 15:43:02 | 查看: 861| 回复: 0 图形视图框架(下) 版权声明 该文章原创于Qter开源社区(www.qter.org),作者yafeilinux,转载请注明出处! 导语 环境:Windows Xp + Qt 4.8.4+QtCreator 2.6.2 目录 三.场景(QGraphicsScene) (一)场景层 (二)索引算法 (三)边界矩形 (四)图形项查找 (五)事件处理和传播 (

视频处理-我用qt+opencv 录制了视频

问题描述 我用qt+opencv 录制了视频 我用qt+opencv 录制了视频,问题一:录制了1分钟,视频中不到一分钟!用了定时器,ntimer= 1000/fps; 问题二,怎么录制音频? 谢谢 解决方案 OpenCV 录制视频QT OpenCV 播放视频Opencv + Qt 获取视频中任意一帧

QT中的各种对话框

界面效果图如下,大家可以用代码自己操作 diglog.h #ifndef DIALOG_H #define DIALOG_H #include <QDialog> QT_BEGIN_NAMESPACE class QCheckBox; class QLabel; class QErrorMessage; QT_END_NAMESPACE class Dialog : public QDialog { Q_OBJECT public: Dialog(QWidget *parent = 0); p