消息队列用c++用Qt进行网络传输

Message queue C++ with Qt for network transmission

本文关键字:网络传输 c++ 队列 消息 Qt      更新时间:2023-10-16

我正在为服务器发送的用于文件复制的网络消息编写一个新的消息队列。

从套接字中读取一定数量的字节后,我将发出一个信号来解释头文件,如果不能解释,再读取一些,然后再次发出信号,直到有已知的类型。

在解释了消息头之后,我必须调用相应的worker(类)来解码消息的其余部分。

我的问题是,如果是的话,使用设计模式会更好吗?最好的方法是什么?还是我应该用旧的方法做一个开关?

我使用的是Qt 4.8.5,它应该可以在所有系统上工作(Win/Mac/Linux)。

如果您提前知道所有消息头类型,那么您可以使用QHash来存储所有消息解析器,并映射到消息头类型。

因此,需要一个enum来定义所有消息头类型,并需要一个基类来定义所有消息解析器。你最终会得到:

QHash<MessageType, AbstractMessageParser*> mappings;
然后可以用一行代码检索与特定头类型对应的解析器。当然,所有解析器都需要在实际解析之前在散列中注册。我会在程序的初始化阶段这样做。

所以,没有特定的模式。我想你可以使用工厂模式,但你最终还是会得到一个大屁股开关。

你可以把它看作是工厂模式或服务定位器模式的一个变体。

关于使用设计模式或切换案例来处理工作线程中的操作,我会建议使用命令模式,因此您可以将所需的信息组合在命令类中,然后从工作线程调用该类。switch case的问题可能是一个巨大的函数和每个消息的enum/struct/code的分裂。