在TCP流中发送消息

TCP是基于流的,这意味着您发送字节而不必将它们放在“消息”中,因此接收方可能会收到一半消息或三分之二的消息。

因此,在每个消息都是固定大小的游戏中,如果我收到一部分消息,我可以将其保留在缓冲区中,直到我收到另一部分。 这有点单调乏味,但还有其他基于消息的可靠协议吗? 可能有,但是在操作系统中没有像TCP和UDP那样实现,所以我必须使用一些库,只要它易于使用就可以了。

我总是可以制作一个有点可靠的UDP协议。 你有什么建议的?

您可以通过UDP实现自己的基于ACK的协议。 在发送方前面添加带有消息/序列号的消息,并将该号码回送给接收方的发送方。 在发送端为每条消息启动一个计时器,并在收到相应的ACK时取消它。 如果计时器弹出,请重新发送消息。

对于这个应用程序来说,XMPP太重了。

如果您正在查看传输层协议,请检查SCTP。 SCTP像UDP一样面向消息,并确保可靠,按顺序传输具有TCP等拥塞控制的消息。

SCTP尚未广泛使用。 所以我建议使用TCP与某种消息框架。

您可以使用ØMQ (ZeroMQ)作为消息传递基础结构。 ZeroMQ在TCP和其他传输机制之上提供可靠的消息传递。 它有一个C API和一个综合指南 。

请注意,您必须为所有对等方使用外部库,但您说对您没问题。

你可以看一下XMPP 。 它是基于XML消息的基于TCP / IP的协议。

协议缓冲区,对XMPP的了解较少,但在您的情况下可能会有一些兴趣。

http://code.google.com/intl/en-US/apis/protocolbuffers/docs/overview.html