我目前正面临着通过网络传递可能包含不同数据的邮件的问题。我已经创建了我的游戏原型,现在我正忙着为我的游戏实现网络。
我想发送不同类型的消息,因为我认为不断发送每个网络的所有信息是愚蠢的,我宁愿发送包含不同数据的不同消息。什么是区分接收方收到的消息的最佳方法?
目前我有一个系统,我在前面添加一个字符串来区分某种类型的消息。然后我的消息通过我自己的消息解析器类发送,它确定类型,并将其反序列化为正确的类型。
我想知道的是,有更好的方法吗?它似乎应该是一个相当普遍的问题,所以必须有一个更简单的解决方案,除非我已经做了很简单的方法。
谢谢!
答案 0 :(得分:1)
我已经仔细阅读了你的问题,现在我不明白你的问题是什么,你说Currently I have a system where I prepend a string which distinguishes a certain type of message. My message is then sent through my own message parser class where it determines the type, and deserializes it to the correct type.
看起来没问题,您可以使用我的答案在水平线以下来缩小邮件的大小,但原则保持不变。
这是进行异步通信的正确方法,但是如果你确实同步,你知道当你发送A消息时你会收到B回答,所以你不必在前面添加一个区分消息的字符串,但你必须采取在得到前一个答案之前,请注意不要发送另一条消息。
因此,如果您知道如何格式化答案,您不需要任何标识字节,例如,您知道前四个字节是一个整数,然后是八个字节的浮点数等...
使用boost::serialization,通常您可以在哑字节缓冲区内保存结构,甚至使用指针,通过网络发送缓冲区,另一侧反序列化。
This example shows how Boost.Serialization can be used with asio to encode and decode structures for transmission over a socket. 即使使用boost :: asio,您也只能轻松提取序列化部分。