Я разрабатываю двоичный протокол для взаимодействия клиент/сервер с использованием Netty, и количество отправленных байтов не является фиксированной суммой и может быть произвольного размера.Работа с фрагментацией в Netty
Клиент посылает что-то вроде этого:
первых 4 байта для представления идентификационного номера оставшихся байт является строкой
В примере, который я видел, что сообщение было фиксированным размером, но содержимое String может быть любого размера и необходимо обеспечить, чтобы он не был фрагментирован при получении сервером. Как я могу добиться этого в Netty?
Заранее спасибо.
Привет Гарет, спасибо за ответ - очень ценится. В настоящее время я не использую ничего, чтобы определить конец сообщения. Как только я получаю идентификатор, вызывая buffer.readLong(), я тогда вызываю buffer.toString (String charsetName) - что не является идеальным. Когда вы ссылаетесь на отправку размера полезной нагрузки, предлагаете ли вы добавить его в начало и дождаться получения длины и использовать это произвольное число, чтобы определить, ждать больше байтов на сервере? – algolicious
Да. Как только у вас есть длина, вы можете вместо этого использовать функцию LengthFieldBasedFrameDecoder (если ваши сообщения, вероятно, будут очень большими, хотя, вероятно, лучше написать свой собственный на основе SimpleChannelUpstreamHandler, так что буфер будет выделен только один раз). – Gareth