Я рассматриваю, используя комок («кодирование/завал») для сериализации данных в сетевом протоколе, я искал вокруг и не могут найти какое-либо решение этих проблем:Капли по проводам
Кадрирование сообщений. Документация gob создает впечатление, что вы можете просто обернуть TCP-соединение в декодере gob и прочитать. Но что произойдет, если вы получили только половину сообщения? Может ли gob каким-то образом справиться с этим, или я вынужден добавить кадр сообщения и скопировать данные сообщения в буфер для gob для unserialize?
Различные типы сообщений. Протокол имеет разные типы сообщений, как это лучше всего обрабатывать с помощью gob? Имея идентификатор перед каждым блоком gob, указывающим тип данных? Помещая все сообщения в сообщение «Мастер», которое содержит поля для всех разных сообщений (сводя их только к одному типу сообщения)? Я попробовал последний (проще), и у него, кажется, огромный НАРУШЕНИЕ (> 650 байт).
Поскольку пакет gob предназначен для кодирования потоков значений, пакет управляет кадрированием. Можете ли вы подробнее рассказать о своей заботе о частичной стоимости? Пакет gob отправляет целые значения, если во время кодирования не возникает паники или чего-то еще. Если это произойдет, восстановление не произойдет. –
Я пробовал кодировать структуру с помощью gob, выводил результат, дважды копировал его в буфер и удалял последние ~ 5 байтов, чтобы имитировать половину переданной структуры. Это дает мне ошибку, но опустошает буфер. Неужели я ошибаюсь в своем утверждении, что это может произойти? Я не ожидал, что gob добавит обрамление. – Cshark
Дублирование выходного сигнала кодирующего устройства не совпадает с тем, что кодирование одного и того же значения два раза. Используйте один кодировщик для кодирования нескольких значений. Используйте один декодер для декодирования нескольких значений. Что вы пытаетесь имитировать, отсекая последние 5 байтов? –