Qt/E服务器到客户端的消息传递

简介: 前面提到的服务器最重要的功能就是对鼠标,键盘,屏幕等资源进行分配管理,尤其是要独占鼠标,键盘等设备,因此服务器要把各种底层设备消息通知到各个客户端进程,目前主流的GUI平台都无一例外采用事件驱动模型,这些消息正是其事件的主要来源,在其内部表示为QWSEvent,所有具体的消息(事件)都是其子类,下...

前面提到的服务器最重要的功能就是对鼠标,键盘,屏幕等资源进行分配管理,尤其是要独占鼠标,键盘等设备,因此服务器要把各种底层设备消息通知到各个客户端进程,目前主流的GUI平台都无一例外采用事件驱动模型,这些消息正是其事件的主要来源,在其内部表示为QWSEvent,所有具体的消息(事件)都是其子类,下图给出了所有的消息(事件):

img_cf10c368849a5e2ed443bf52d5cd9635.jpe

   

 这里面有很多事件是非常直观的,比如键盘事件,鼠标事件等,而有一些事件就不那么直观了,很难看明白,像QWSConnectedEventQWSPropertyReplyEvent等,他们有的是为了客户端和服务器之间通信的辅助性事件,比如QWSConnectedEvent,而像QWSPropertyReplyEvent,则是Qt内部管理的需要,与物理设备像鼠标,键盘,屏幕没有关系,在移植过程中也不会涉及,并且也很少直接与这些事件打交道,因此就不再深入分析了,但是这些事件的传递过程是一样的。

这里以鼠标事件QWSMouseEvent为例来讲解,事件如何从服务器传递到客户端。我们知道服务器和客户端的通信和网络通信是一样的,必须将数据串行化才能进行传递。服务器进程将QWSEvent串行化(具体过程见前一节分析),然后发送到客户端进程,而客户端进程则进行相反的工作,依据串行化的字节序列,建立起一个QWSEvent对象实例。QWSEvent的反串行化的过程,是典型的工厂模式的应用(Qt中有很多典型的设计模式的使用范例),具体流程如下:

img_26b56d1636542e03cef8237cac9d027b.jpe

Qt中有不少地方用到了工厂模式,这里使用的模式还是比较典型的,值得学习一下。

QWSEvent *QWSEvent::factory(int type)

{

    QWSEvent *event = 0;

switch (type) {

……

    case QWSEvent::Mouse:

        event = new QWSMouseEvent;

        break;

    default:

        qCritical("QWSEvent::factory() : Unknown event type %08x!", type);

    }

    return event;

}

 

 

目录
相关文章
|
17天前
|
存储 SQL 安全
什么是传统的客户端服务器模式架构
什么是传统的客户端服务器模式架构
38 0
|
17天前
|
消息中间件 运维 网络协议
客户端和服务器之间的通信
客户端和服务器之间的通信
38 0
|
17天前
|
监控 关系型数据库 Linux
|
17天前
|
Linux
CentOS7.9服务器一键脚本部署FRP内网穿透服务端与客户端
CentOS7.9服务器一键脚本部署FRP内网穿透服务端与客户端
292 0
|
17天前
|
网络协议 Python
pythonTCP客户端编程连接服务器
【4月更文挑战第6天】本教程介绍了TCP客户端如何连接服务器,包括指定服务器IP和端口、发送连接请求、处理异常、进行数据传输及关闭连接。在Python中,使用`socket`模块创建Socket对象,然后通过`connect()`方法尝试连接服务器 `(server_ip, server_port)`。成功连接后,利用`send()`和`recv()`进行数据交互,记得在通信完成后调用`close()`关闭连接,确保资源释放和程序稳定性。
|
15天前
|
网络协议 JavaScript 前端开发
WebSocket:实现客户端与服务器实时通信的技术
WebSocket:实现客户端与服务器实时通信的技术
|
10天前
|
移动开发 iOS开发 Perl
iOS客户端和h5页面的互相调用,服务器和客户端间通信方式
iOS客户端和h5页面的互相调用,服务器和客户端间通信方式
17 0
|
11天前
|
网络协议 Python
在python中利用TCP协议编写简单网络通信程序,要求服务器端和客户端进行信息互传。 - 蓝易云
在这个示例中,服务器端创建一个socket并监听本地的12345端口。当客户端连接后,服务器发送一条欢迎消息,然后关闭连接。客户端创建一个socket,连接到服务器,接收消息,然后关闭连接。
67 0
|
17天前
|
网络协议
Socket实现服务器和客户端(手把手教会)
Socket实现服务器和客户端(手把手教会)
|
17天前
|
网络协议 Dubbo Java
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
【网络编程】理解客户端和服务器并使用Java提供的api实现回显服务器
15 0

推荐镜像

更多