Используйте zlib для распаковки входящих данных (сжатых данных) из TCP-соединения

У меня есть клиент и сервер, клиент отправил сжатые чанки (сжатые с помощью функции zlib compress(), а сервер не имеет размер каждого чанка) через tcp на сервер. Вопрос в том, как распаковать полученные данные на стороне сервера? Отправка (запись) и получение (чтение) данных являются постоянными, поэтому я не могу дождаться, пока клиент получит все данные, а затем распаковать их.

1 ответ

Решение

Чтобы поставить сжатие поверх TCP, для этого нужен протокол. Прежде чем такой протокол будет реализован, он должен быть разработан. В этом проекте должно быть указано, как получатель будет выполнять кадрирование, чтобы отправитель мог быть реализован для работы с этим дизайном получателя. Вы должны сделать огромный шаг назад и выяснить, как будет работать протокол в целом. Вы должны были определенно сделать это до того, как начали внедрять.

Вы можете разработать потоковый протокол для сжатия поверх TCP (где получатель может распаковывать данные, поскольку целые блоки распакованных данных доступны без необходимости явного кадрирования). Вы можете разработать блочный протокол для сжатия поверх TCP, но для этого потребуется какой-то фактический протокол для поиска концов блоков. Возможно, вам придется учитывать, когда данные "выталкиваются" (или сбрасываются) на стороне сжатия, в зависимости от подробностей протокола над вами.

Проектируйте систему до того, как вы начнете внедрять, в противном случае вы обнаружите, что в какой-то момент вы не знаете, какой должна быть реализация.

Другие вопросы по тегам