TCP - это просто поток байтов; у него нет понятия «метаданные» против «сообщения», фактически у него нет понятия «сообщение» - любой логический разрыв между последовательным сообщением целиком зависит от вас. Из-за этого обычно существует понятие «фреймы». Например, мы могли бы определить «фрейм» (где мы используем заголовки для метаданных):
- 4 байта, int32 с прямым порядком байтов: {количество заголовков} (= H)
- 4 байта, младший порядковый номер int32: {длина полезной нагрузки в байтах} (= N)
- H ×
- чистый ASCII: {header-name} = {header- значение} \ r \ n
- полезная нагрузка: {N байт}
, но буквально нам доступна любая схема. В некоторых случаях метаданные просты и предсказуемы, и вы можете, по сути, рассматривать их как часть сообщения, а сообщение real - это субданные; например, представьте, что мы отправляем JSON; вместо отправки:
{
"somedata": 12345,
// ...
}
отправляем:
{
"blah-meatadata-whatever": "foo",
"more-metadata": true,
"content":
{
"somedata": 12345,
// ...
}
}