我正在开发一个与游戏服务器接口的小客户端。服务器通过HTTP向连接的客户端发送消息。相对来说,解析进入客户端的文本消息并形成返回响应是相对容易的。
现在我想弄清楚的是如何打破这个过程。我希望有一个线程接收消息,将它们解析为某个数据对象,并将它们放到一个“传入”队列中进行处理。然后,另一个线程从这个队列中读取消息并处理它们(客户机的大脑或AI ),并将响应返回到服务器。
我希望有一个线程来监视输入的数据来处理文本(分解消息,取出重要的数据等等)。所以AI线程没有这种开销。但问题是,服务器可以向客户端发送几百种不同类型的消息(客户端可以看到什么,其他玩家可以看到什么,如果您正在开火等)。我想将这些数据打包到一个整洁的小结构中,这样AI就可以快速地处理它,并且AI可以很容易地重写。
但是,我如何编写一个函数,该函数可以从队列中提取某些内容,并知道它是什么类型的消息(因此我知道消息中包含了什么数据)?
示例消息:
活动(告诉您是否还活着)
它只有一个数据对象,当前的游戏时间。
大坝(告诉你是否受损)
有大量的数据,谁损坏了你,有多少,枪是什么,如果你能看到,等等。
是否有可能使一个对象能够处理所有这些不同的消息类型并由单个函数解释?很少有消息具有共同的属性,所以我不认为继承或仅仅创建一个大消息类是非常好的.
我不是在寻找一个完整的解决方案,只要指出正确的方向,希望我能在路上学到一点:-)
发布于 2011-08-02 21:33:11
基本上,你要问的是一个协议:如何交换和解释数据。传统上,您可以定义自己的命令(它们很可能一开始就很天真--发送带有换行符的纯文本数据,以指示命令的结尾或类似的内容)。过了一会儿,您开始意识到还需要更多的数据(您如何处理二进制数据?如何处理错误?(等)
幸运的是,有一些库可以让你的生活更轻松。现在,我倾向于使用简单的RPC类库来满足我的大部分需求。示例包括协议缓冲区(由Google提供)、Apache (由Facebook提供)和Apache。
https://stackoverflow.com/questions/6918663
复制相似问题