使用Qt和Enginio开发云端程序

使用Qt和Enginio开发云端程序
Enginio是随着Qt2012年的Qt开发者大会上提出的。目的是让Qt开发者对接目前正在蓬勃发展的云技术。在经过半年的发展后,Enginio已经迎来了第一个Alpha版本(2013年7月5日)。预计Enginio将在Qt5.2的时候成为Qt的一部分。
在认识Enginio之前,我们先来了解一下几种不同的与技术解决方案:IaaS,即Infrastructure as a Service,基础架构即服务,通过互联网提供了数据中心、基础架构硬件和软件资源。IaaS可以提供服务器、操作系统、磁盘存储、数据库和/或信息资源。PaaS,即Platform as a Service,平台即服务,提供了基础架构,软件开发者可以在这个基础架构之上建设新的应用,或者扩展已有的应用,同时却不必购买开发、质量控制或生产服务器。SaaS,即Software as a Service,软件即服务,是最为成熟、最出名,也是得到最广泛应用的一种云计算。大家可以将它理解为一种软件分布模式,在这种模式下,应用软件安装在厂商或者服务供应商那里,用户可以通过某个网络来使用这些软件,通常使用的网络是互联网。而我们将要了解的Enginio,则是BaaS(Backend as a Service)。它的作用是提供一个数据库后台,通过它规定的API调用,就可以将应用程序的各种数据存储在后台上,实现即存即得。从这个角度来说,Enginio很像我们所说的网盘,只是它提供了Qt风格的API,给Qt开发者带来了很大的方便。
原创文章,反对未声明的引用。原博客地址:http://blog.csdn.net/jiangcaiyang123/article/details/9465757
目前Enginio的内部版本是0.5,可见它仍处于评估期,0.5相比0.4,有了很大的改变,首先是API接口全部重写了,在0.4版本上编译成功的应用到了0.5就要重新编码再编译。官方给的解释是要让0.5的API尽量像Qt其它库中那样的风格。此外为了代码的复用,它不再提供自己Object,转而用QJsonObject作为传输类型。Json是一种简单而且丰富的数据类型,它能够表达很多种格式的数据。此外0.5还有一些其它的更新。

我自己制作了一个小的例子程序(下载地址在这里),测试Enginio是否可用,事实证明Enginio是能够工作的。

下面就来介绍一下如何下载并使用Enginio。
1、登录https://engin.io/
2、如果没有注册的话,那么注册(Sign up)一个账号吧。如果你已经有了一个账号,那么可以直接点击登录(Sign in)。 3、在你的dashboard中创建一个Backend,这样你将得到一个后台ID和**,这些将在程序中起着重要的作用。同时将会跳转到Backend界面。
4、在Libraries这一栏中点击Qt/QML的Download,下载最新版的Qt库。
5、解压库到一个没有中文和空格的路径中。
6、在确保qmake和make/mingw32-make在路径中后,用cmd,在控制台下构建Enginio。方法是:
cd $${Enginio路径}
qmake
make install或者mingw32-make install
7、Enginio库安装完毕,以后就可以#include <Enginio>和在pro文件中使用QT += enginio了。

下面介绍一下如何使用Enginio(Qt)与后端通信。首先是接收数据,下面的代码介绍了如何将Enginio后台的数据接收到客户端:

    // 1、创建Enginio的客户端类并写出backendID和backendSecret
    m_pClient = new EnginioClient;
    
    m_pClient->setBackendId( g_BackendID );
    m_pClient->setBackendSecret( g_BackendSecret );

    // 2、从后台获取数据
    QJsonObject object;
    object["objectType"] = QStringLiteral( "objects.ColorCube_Comment" );
    m_pClient->query( object );
    connect( m_pClient, SIGNAL( finished( EnginioReply* ) ),
             this, SLOT( DownloadText( EnginioReply* ) ) );
            
void FeedbackDialog::DownloadText( EnginioReply* pReply )
{
    // 3、解析从后端获取的数据
    QJsonArray result = pReply->data( )["results"].toArray( );

    foreach ( const QJsonValue& value, result )
    {
        const QJsonObject& object = value.toObject( );
        const QString& time = object["updatedAt"].toString( );
        const QString& comment = object["Comment"].toString( );
        ui->textEdit->append( time + ": " + comment );
    }

    ……
}

发送数据的步骤就更简单了。

    // 1、创建Enginio的客户端类并写出backendID和backendSecret
    m_pClient = new EnginioClient;
    
    m_pClient->setBackendId( g_BackendID );
    m_pClient->setBackendSecret( g_BackendSecret );
    
    // 2、创建一个QJsonObject,填充它
    QJsonObject comment;
    comment.insert( "objectType", QString( "objects.ColorCube_Comment" ) );
    comment.insert( "Comment", ui->lineEdit->text( ) );

    // 3、发送它
    m_pClient->create( comment );

除了可以通过API获取数据外,还可以登录Enginio的后台去看数据是否已经添加,非常方便。当然示例代码只是将一个个文字发送到后台,通过Json,像图片之类的多媒体文件也可以上传和下载。

最后在qt-project.org论坛上,Enginio的开发团队希望在后续的版本中添加notification功能,也就是说可以通过一个客户端对后端的改动来通知所有客户端的更新,就像SVN协同工作一样,又像是聊的功能。如果真是这样,那么Enginio作为一款Qt开源库的作用就更大了,期待后续版本!

版权声明:本文为iteye_13202原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/iteye_13202/article/details/82522126

智能推荐

说说 Python Django 应用的基础目录结构

通过以下 django-admin 指令创建应用之后,就会生成应用的基础目录结构。 比如,我们建立了一个叫 ‘first’ 的应用,它的目录结构是这样的: 目录或文件 说明 最外层的 first/ 这是新应用的根目录,所有与该应用相关的内容都放在这里。 manage.py 用于管理 Django 项目的命令行工具。 里面一层的 first/ 目录 是一个...

Springboot整合rabbitMQ

依赖: 配置文件application.yml RabbitConfig 消息生产者RabbitProducer 消息消费者RabbitCustomer 通过Controller进行调用 启动项目后调用接口: 结果:...

Thread.join()方法的使用

如果一个线程A执行了thread.join()语句,代表当前线程A等待thread线程终止后才从thread.join()方法返回 并且这个方法具有超时特性,可以添加参数设置 输出结果: jdk中Thread.join()方法的源码(进行了部门调整)   每个线程终止的条件是前驱线程的终止,每个线程等待前驱线程终止后,才从join()方法返回,  当线程终止时,会调用自身的no...

linux服务器部署jenkins笔记

安装jenkins参考文档:https://blog.csdn.net/tomatocc/article/details/83930714 1. 打开jenkins官网:https://jenkins.io/download/ 将war包下载到本地 **ps:**这里要注意的是要下载左边下方的war包,不要下载右边下面的war包。左边是稳定版本,右边是最新版本,建议大家使用稳定版本(我刚开始下载的...

k8s部署elasticsearch集群

百度营销大学     环境准备 我们使用的k8s和ceph环境见: https://blog.51cto.com/leejia/2495558 https://blog.51cto.com/leejia/2499684 ECK简介 Elastic Cloud on Kubernetes,这是一款基于 Kubernetes Operator 模式的新型编排产品,用户可使用该产品在...

猜你喜欢

saas-export项目-AdminLTE介绍与入门

AdminLTE介绍 (1)AdminLTE是什么? AdminLTE是一款建立在bootstrap和jquery之上的开源的模板主题工具 (2)AdminLTE有什么特点? 提供一系列响应的、可重复使用的组件, 并内置了多个模板页面 自适应多种屏幕分辨率,兼容PC和移动端 快速的创建一个响应式的Html5网站 AdminLTE 不但美观, 而且可以免去写很大CSS与JS的工作量 AdminLTE...

MyBatis中ResultMap结果集映射

用于解决属性名和字段名不一致的情况: resultMap 元素是 MyBatis 中最重要最强大的元素。...

编写一个shell

编写shell的过程: 1.从标准输入中读入一个字符串。 2.解析字符串 3.创建一个子进程的执行程序。 4.子进程程序替换。 5.父进程等待子进程退出。...

WEB自动化测试中Xpath定位方法

前言: Xpath是在XML文档中查找信息的一种语言,使用路径表达式来选取XML文档中的节点或节点集,由于XML与HTML结构类似(前者用于传输数据,后者用于显示数据),所以Xpath也常用于查找HTML文档中的节点或节点集。 一  路径表达式: 路径以“/”开始     表示找到满足该绝对路径的元素; 路径以//”开始  ...

力扣困难难度 第4题 寻找两个正序数组的中位数

先看一眼题 我的思路: 设置下标i,j分别用于遍历两个数组,初始值均为0,直到找到两个数组中从小到大的第第length/2个数为止结束循环,length为两个数组长度之和。 ·每次比较nums[i]nums[j],如果前者小则i++,否则j++ ·循环结束时,如果count已经达到length/2,则说明已经找到了中位数,[注意:此时有可能正好其中一个数组遍历完了!所以...