2014-01-30 4 views
1

Я пытаюсь закрепить сервер java-websocket от DoS-атак, ограничив размер входящего сообщения.Являются ли дейтаграммы или потоки WebSockets?

Я нашел this great Q&A on C sockets' receive buffers (который, как я полагаю, является способом ограничения размера, поскольку я не могу найти что-либо еще). В нем говорится, что существуют два типа сокетов: датаграмма и потоковая передача.

The answer говорит, что сокеты datagram просто отсекают лишние байты, что очень хорошо для моих целей, поскольку неполное сообщение является неправильным и приведет к тому, что отправитель будет внесен в черный список.

Теперь я пытаюсь определить, являются ли WebSockets дейтаграммой или потоковой передачей. Похоже, что они дейтаграммы, поскольку они используют «фреймы», но я понятия не имею. Это верно?

Если они могут быть потоковыми, как может java-websocket, клиент & сервер, настроен использовать датаграмму, если это даже подходит? Возможно ли обнаружить чрезмерно большое сообщение с дейтаграммой?

Если потоковая передача более уместна, как можно обнаружить чрезмерно большие сообщения?

+0

размер пакета, размер буфера приема & итоговое сообщение (TCP) - совсем другие вещи. Также, когда вы получаете поток сообщений, просто не храните его в памяти до тех пор, пока он не взорвется, вы можете отказаться от данных в дороге. http://en.wikipedia.org/wiki/WebSocket – zapl

+0

@zapl Спасибо, что искали zapi! Я понятия не имею, как это сделать или начать. Не могли бы вы отправить пример кода? Большое вам спасибо заранее! –

+0

У меня его нет. Но вы можете просто прочитать max X байтов, а затем остановиться. http://stackoverflow.com/questions/15445504/copy-inputstream-abort-operation-if-size-exceeds-limit – zapl

ответ

1

проверка this question, похоже, использовать дейтаграмму с текущей спецификацией websocket невозможно.

+0

Большое спасибо! По крайней мере моя проблема была сужена. Теперь, если бы я мог только выяснить, как применить его к java-websocket ... –