C++ 处理多种类型消息的通用方法

C++ 处理多种类型消息的通用方法,c++,C++,我正在开发一个与游戏服务器接口的小客户端。服务器通过HTTP向连接的客户端发送消息。解析进入客户端的文本消息并形成要发送回的响应相对容易 现在我想弄清楚的是如何打破这个过程。我希望有一个线程接收消息,将它们解析为一些数据对象,并将它们放入一个“传入”队列中进行处理。然后,另一个线程从这个队列中读取消息并处理它们(客户端的大脑或AI),然后将响应返回给服务器 我想让监视传入数据的线程处理文本(分解消息、提取重要数据等),这样AI线程就不会有这样的开销。但问题是服务器可以向客户机发送几百种不同类型的

我正在开发一个与游戏服务器接口的小客户端。服务器通过HTTP向连接的客户端发送消息。解析进入客户端的文本消息并形成要发送回的响应相对容易

现在我想弄清楚的是如何打破这个过程。我希望有一个线程接收消息,将它们解析为一些数据对象,并将它们放入一个“传入”队列中进行处理。然后,另一个线程从这个队列中读取消息并处理它们(客户端的大脑或AI),然后将响应返回给服务器

我想让监视传入数据的线程处理文本(分解消息、提取重要数据等),这样AI线程就不会有这样的开销。但问题是服务器可以向客户机发送几百种不同类型的消息(客户机可以看到的,其他玩家,如果你正在开火等等)。我想把这些数据打包成一个整洁的小结构,这样人工智能就可以快速处理它,并且人工智能也可以很容易地重写

但是,我如何编写一个函数来从队列中提取某些内容,并知道它是什么类型的消息(这样我就知道消息中包含什么数据)

示例消息:

活着(告诉你是否活着)
它只有一个数据对象,即当前游戏时间

大坝(显示是否损坏)
有一大堆数据,谁伤害了你,有多少,是什么枪,如果你能看到,等等

有没有可能使一个对象能够处理所有这些不同的消息类型,并由单个函数进行解释?很少有消息具有公共属性,所以我不认为继承或仅仅创建一个真正大的消息类会很好


我不是在寻找一个完整的解决方案,只要给我指出正确的方向,希望我能在途中学到一些东西:-)

基本上,你要问的是协议:数据是如何交换和解释的。传统上,您会定义自己的(很可能它们一开始就很幼稚——发送带有换行符的纯文本数据来指示命令的结束,或者类似的事情)。过了一段时间,您开始意识到需要更多(如何处理二进制数据?如何处理错误?等等)


幸运的是,有图书馆可以让你的生活更轻松。现在我倾向于使用简单的RPC类库来满足我的大部分需求。示例包括协议缓冲区(由Google提供)、Apache Thrift(由Facebook提供)和Apache Avro。

基本上,您所问的是协议:数据如何交换和解释。传统上,您会定义自己的(很可能它们一开始就很幼稚——发送带有换行符的纯文本数据来指示命令的结束,或者类似的事情)。过了一段时间,您开始意识到需要更多(如何处理二进制数据?如何处理错误?等等)


幸运的是,有图书馆可以让你的生活更轻松。现在我倾向于使用简单的RPC类库来满足我的大部分需求。示例包括协议缓冲区(由Google提供)、Apache Thrift(由Facebook提供)和Apache Avro。

这称为协议。困难的是定义你自己的。最简单的方法是使用图书馆。我可以推荐protocol buffers(谷歌)或thrift(facebook)…@Chris-Awesome。我想我会使用谷歌的协议缓冲区。如果你想把你的评论变成一个答案,我会接受的。这叫做协议。困难的是定义你自己的。最简单的方法是使用图书馆。我可以推荐protocol buffers(谷歌)或thrift(facebook)…@Chris-Awesome。我想我会使用谷歌的协议缓冲区。如果你想把你的评论变成一个答案,我会接受Google protobuf的+1。把它和zmq混合在一起,你就完成了,IMO:)+1代表谷歌protobuf。再加上zmq,你就完成了,IMO:)