我正在开发一个基于Linux的项目,该项目包含一个用C语言编写的“核心”应用程序和一个可能用Python编写的Web服务器。核心和Web服务器必须能够通过TCP / IP相互通信。我的重点是C中的核心应用程序。
由于核心和Web服务器使用不同的编程语言,我正在寻找一种易于在两种语言中使用的消息协议。目前我认为JSON是一个很好的候选人。然而,我的问题不在于消息协议,而在于如何确定从套接字读取(并可能发送到)套接字的字节数,特别是在使用JSON或XML等消息协议时。 p>
据我所知,无论您使用的是JSON,XML还是其他一些消息协议,都不能在消息本身中包含消息的大小,因为为了解析消息,您需要整个消息,因此需要提前知道它的大小。请注意,“message”是指根据使用的消息协议格式化的数据。
我一直在思考并阅读有关解决方案的问题,并提出了以下两种可能性:
因为我读过的所有提供的解决方案都不是专门用于某些消息协议的,比如JSON,我认为可能是因为我错过了某些东西。
那么,我提供的两种可能性中哪一种是最好的,或者,我不知道这个问题的其他一些解决方案?
亲切的问候。
答案 0 :(得分:2)
这是流遇到的典型问题,包括TCP的流,通常称为"消息边界问题。"您可以搜索更详细的答案,而不是我在这里给出的答案。
要确定边界,您有一些选择:
{
必须在JSON中用}
关闭),但我不是&# 39;看到这样做有什么好处。如果这不是一次学习经历,您可以使用现有协议为您完成所有这些操作。例如,HTTP(低效)或gRPC(更高效)。
编辑:我最初说过必须包含一个校验和来处理数据包丢失,而不管TCP是什么......在这些数据包被正确接收之前TCP不会前进,因此不是问题。 IDK我在想什么。