Я работаю над проектом на основе Linux, состоящим из «основного» приложения, написанного на C, и веб-сервера, возможно, написанного на Python. Ядро и веб-сервер должны иметь возможность общаться друг с другом через TCP / IP. Я сосредоточен на основном приложении, на языке C.
Из-за различных языков программирования, используемых для ядра и веб-сервера, я ищу протокол сообщений, который прост в использовании на обоих языках. В настоящее время я считаю JSON хорошим кандидатом. Мой вопрос, однако, не столько о протоколе сообщений, сколько о том, как определить количество байтов для чтения (и, возможно, отправки) в сокет, особенно при использовании протокола сообщений, такого как JSON или XML.
Насколько я понимаю, независимо от того, используете ли вы JSON, XML или какой-либо другой протокол сообщений, вы не можете включать размер сообщения в само сообщение, потому что для разбора сообщения вам потребуется все сообщение и, следовательно, Нужно знать размер его заранее. Обратите внимание, что под «сообщением» я подразумеваю данные, отформатированные в соответствии с используемым протоколом сообщений.
Я размышлял и читал о решении этой проблемы и пришел к следующим двум возможностям:
- Определите максимально возможный размер сообщения, скажем, 500 байт, и на основе этого определите размер буфера, скажем, 512 байт, и добавьте дополнение к каждому сообщению, чтобы отправлять 512 байт;
- Добавить каждое сообщение с его размером в «обычном тексте». Если размер хранится в Int (4 байта), то получатель сначала читает 4 байта из сокета и, используя эти 4 байта, определяет, сколько байтов следует читать для текущего сообщения;
Поскольку все предложенные решения, которые я читал, не были специально предназначены для использования какого-либо протокола сообщений, такого как JSON, я думаю, что, возможно, я чего-то упускаю.
Итак, какая из двух предложенных мною возможностей является лучшей, или я не знаю другого решения этой проблемы?
С уважением.