Полагаться на сокет setReceiveBufferSize или использовать BlockingQueue?

Я делаю приложение, которое подразумевает чтение большого количества данных, отправленных на мой сокет.

У меня проблема в том, стоит ли мне полагаться на сокет setReceiveBufferSize, помещать туда большое значение, чтобы надеяться, что он соберет все данные, которые у меня есть, до тех пор, пока я не смогу их обработать, или использовать BlockingQueue, чтобы поместить все туда и тогда обрабатывать его из другого потока, который поддерживает пул и обработку данных?

Также это плохой дизайн, если я позволю очереди с максимальным количеством элементов? (так что я просто говорю: "да, получи столько элементов, сколько захочешь"), я имею в виду потребление памяти, если получу действительно большое количество элементов?

С уважением, Аврелиан

1 ответ

Решение

Большой приемный буфер сокетов - это всегда хорошая идея, но из-за оконных / пропускных способностей TCP, а не из-за медленного чтения. Вы должны стремиться читать ввод как можно быстрее, конечно же, так быстро, как он поступает. Предлагаемый BlockingQueue - это пустая трата времени и места. Если приемный буфер сокета заполнится, отправитель остановится. Это все, что вам нужно.

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