TCP是基于流的,这意味着您发送字节而不必将它们放在"消息中,因此接收方可能会收到一半消息或三分之二的消息。
因此,在每个消息都是固定大小的游戏中,如果我收到一部分消息,我可以将其保留在缓冲区中,直到我收到另一部分。这有点单调乏味,但还有其他基于消息的可靠协议吗?可能有,但是在操作系统中没有像TCP和UDP那样实现,所以我必须使用一些库,只要它易于使用就很好。
我总能制作一个有点可靠的UDP协议。你有什么建议?
答案 0 :(得分:2)
您可以通过UDP实现自己的基于ACK的协议。在发送端前面添加带有消息/序列号的消息,并将该号码回送给接收方的发送方。在发送端为每条消息启动一个计时器,并在收到相应的ACK时取消它。如果计时器弹出,请重新发送消息。
XMPP对于这个应用来说太重了。
答案 1 :(得分:1)
如果您正在寻找传输层协议,请检查SCTP。 SCTP是面向消息的,类似于UDP,并确保可靠,按顺序传输具有TCP等拥塞控制的消息。
SCTP尚未广泛使用。所以我建议使用TCP进行某种消息框架。
答案 2 :(得分:1)
您可以使用ØMQ(ZeroMQ)作为您的消息传递基础架构。 ZeroMQ在TCP和其他传输机制之上提供可靠的消息传递。它有一个C API和一个全面的guide。
请注意,您必须为所有同行使用外部库,但您说对您没问题。
答案 3 :(得分:0)
您可以查看XMPP。它是基于TCP / IP的协议,基于XML消息。
答案 4 :(得分:0)
协议缓冲区,对XMPP的了解较少,但在您的情况下可能会引起一些兴趣。
http://code.google.com/intl/en-US/apis/protocolbuffers/docs/overview.html