Qt/E客户端到服务器命令的传递

简介:     服务器负责各种资源的统一管理,而客户端则是各种为用户进行各种服务的地方,用户的各种请求都是在客户端进行真正的处理。而客户端在计算完毕以后要输出结果则必须通过服务器进行。客户端到服务器的请求是表现为QWSCommand的实例,数据通道仍然是Unix域socket。

    服务器负责各种资源的统一管理,而客户端则是各种为用户进行各种服务的地方,用户的各种请求都是在客户端进行真正的处理。而客户端在计算完毕以后要输出结果则必须通过服务器进行。客户端到服务器的请求是表现为QWSCommand的实例,数据通道仍然是Unixsocket。下图列出了客户端到服务器的所有请求,这些请求大部分是使用Qt开发的程序员无须知道的,在移植Qt的过程中也无需做任何改动。

img_074c8970e3e93f9e3c11d9d9488b3c0d.jpe

    客户端到服务器的通信过程同服务器到客户端的通信一样,首先是串行化,通过socket发送,到了服务器端,服务器再反串行化得到QWSCommand的实例。读者可能注意到QWSCommandQWSEvent都是继承与QWSProtocolItem,实际上串行化的工作由QWSProtocolItem提供,而QWSCommand的子类使用它提供的函数将自己特定的数据串行化。下面给出了QWSCommand的原型,结构非常简单,主要是定义了Command的类型以及制造Command的工厂函数,这里的factory和前面讲到的QWSEvent方式是一样的,就不赘述了。

struct QWSCommand : QWSProtocolItem

{

    QWSCommand(int t, int len, char *ptr) : QWSProtocolItem(t,len,ptr) {}

    enum Type {

        Unknown = 0,

……

        GrabMouse,

……

    };

    static QWSCommand *factory(int type);

};

    接下来我们以QWSGrabMouseCommand为例来讲解客户端到服务器的请求的传递过程,流程图见下图

img_7b65ae951734ae4978692b23c6c8ea38.jpe

 

QWSGrabMouseCommand是客户端想独自占有鼠标时发出的请求。windowidQt内部表示的窗口ID,每一个command都包含该id。grab如果为true表示请求占有鼠标,为false则表示请求释放鼠标,下面给出了QWSGrabMouseCommand的原型。

struct QWSGrabMouseCommand : public QWSCommand

{

    QWSGrabMouseCommand() :

        QWSCommand(QWSCommand::GrabMouse,

                    sizeof(simpleData), reinterpret_cast<char *>(&simpleData)) {}

 

    struct SimpleData {

        int windowid;

        bool grab;  // grab or ungrab?

    } simpleData;

};

服务器在检测到与客户端的连接有数据到来以后需要首先反串行化,然后依据具体的请求做出相应的处理。具体流程见下图:

 

img_2c411a9df7eb6636a370260d9d4fea04.jpe

 

目录
相关文章
|
24天前
|
监控 Linux Shell
|
1月前
|
Python
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
使用Python的socket库实现客户端到服务器端的图片传输,包括客户端和服务器端的代码实现,以及传输结果的展示。
134 3
Socket学习笔记(二):python通过socket实现客户端到服务器端的图片传输
|
1月前
|
JSON 数据格式 Python
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
本文介绍了如何使用Python的socket模块实现客户端到服务器端的文件传输,包括客户端发送文件信息和内容,服务器端接收并保存文件的完整过程。
142 1
Socket学习笔记(一):python通过socket实现客户端到服务器端的文件传输
|
1月前
|
网络协议 Unix Linux
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
一个.NET开源、快速、低延迟的异步套接字服务器和客户端库
|
1月前
|
弹性计算 安全 Linux
阿里云国际版使用ping命令测试ECS云服务器不通的排查方法
阿里云国际版使用ping命令测试ECS云服务器不通的排查方法
|
1月前
|
分布式计算 监控 Hadoop
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
Hadoop-29 ZooKeeper集群 Watcher机制 工作原理 与 ZK基本命令 测试集群效果 3台公网云服务器
39 1
|
1月前
|
网络协议 Java API
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
【网络】TCP回显服务器和客户端的构造,以及相关bug解决方法
61 2
|
1月前
|
存储 网络协议 Java
【网络】UDP回显服务器和客户端的构造,以及连接流程
【网络】UDP回显服务器和客户端的构造,以及连接流程
52 2
|
1月前
|
安全 区块链 数据库
|
7天前
|
机器学习/深度学习 人工智能 弹性计算
什么是阿里云GPU云服务器?GPU服务器优势、使用和租赁费用整理
阿里云GPU云服务器提供强大的GPU算力,适用于深度学习、科学计算、图形可视化和视频处理等多种场景。作为亚太领先的云服务提供商,阿里云的GPU云服务器具备灵活的资源配置、高安全性和易用性,支持多种计费模式,帮助企业高效应对计算密集型任务。