消息队列用c++用Qt进行网络传输
Message queue C++ with Qt for network transmission
我正在为服务器发送的用于文件复制的网络消息编写一个新的消息队列。
从套接字中读取一定数量的字节后,我将发出一个信号来解释头文件,如果不能解释,再读取一些,然后再次发出信号,直到有已知的类型。
在解释了消息头之后,我必须调用相应的worker(类)来解码消息的其余部分。
我的问题是,如果是的话,使用设计模式会更好吗?最好的方法是什么?还是我应该用旧的方法做一个开关?
我使用的是Qt 4.8.5,它应该可以在所有系统上工作(Win/Mac/Linux)。
如果您提前知道所有消息头类型,那么您可以使用QHash
来存储所有消息解析器,并映射到消息头类型。
因此,需要一个enum来定义所有消息头类型,并需要一个基类来定义所有消息解析器。你最终会得到:
QHash<MessageType, AbstractMessageParser*> mappings;
然后可以用一行代码检索与特定头类型对应的解析器。当然,所有解析器都需要在实际解析之前在散列中注册。我会在程序的初始化阶段这样做。
所以,没有特定的模式。我想你可以使用工厂模式,但你最终还是会得到一个大屁股开关。
你可以把它看作是工厂模式或服务定位器模式的一个变体。
关于使用设计模式或切换案例来处理工作线程中的操作,我会建议使用命令模式,因此您可以将所需的信息组合在命令类中,然后从工作线程调用该类。switch case的问题可能是一个巨大的函数和每个消息的enum/struct/code的分裂。
相关文章:
- 我的神经网络不起作用 [XOR 问题]
- 通过套接字[TCP]传输数据 如何在C / C ++中打包多个整数并使用send() recv()传输数据
- GetShortPathName在网络驱动器上使用中文文件夹时失败
- 通过网络、跨平台传递std::变体是否安全
- 在本地网络中通过OpenCV(C++)实时流式传输图像
- ESP8266网络服务器如何流式传输未签名的字符
- ffmpeg H264一次对帧进行编码,用于网络流传输
- 网络传输时间从TCP/IP堆栈
- 在网络上传输数据
- 通过网络中的套接字进行文件传输时,该程序中的文件传输错误是什么
- 用于使用 istream/ostream 传输消息的类似网络协议
- C++ 序列化 std::error_code 以便通过网络传输或保存到磁盘
- 使用C++测量网络上 2 个应用程序之间的数据传输速率(带宽),如何获得公正准确的结果
- 消息队列用c++用Qt进行网络传输
- 如何在网络上传输openv Mat
- 无法在无线网络上通过UDP广播进行快速传输
- 当通过网络(远程屏幕播放应用程序)传输JPEG压缩的屏幕分块时,是否建议使用zlib(或类似)压缩
- 通过网络传输int
- 在矢量中插入一个结构作为网络传输的二进制数据
- UDP 传输和维护网络字节顺序