2) Клиент (ы) не должен быть в состоянии перегрузить сервер слишком большим количеством соединений ...
Ваш лучший вариант - разрешить маршрутизатору ограничивать количество подключений IPадрес означает, что к тому времени, когда ваша программа получает информацию о соединении, системные ресурсы уже распределены.
1) Клиент не должен иметь возможность отправлять неограниченное количество данных,
Наилучший вариант - иметь разумный максимум, который можно отправить, и просто отслеживать, сколько вы прочитали, и как только вы достигнете максимального предела, закройте соединение.
3) Клиент не должен иметь возможность держать соединение открытым бесконечно.
Для этого вы можете просто создать поток, который начнет обратный отсчет, поэтому, когда соединение было открыто для определенноговремя может истечь, и вы можете просто закрыть соединение.
Существуют и другие, более сложные решения, но я думаю, что это будет хорошей отправной точкой.
Если вы хотите что-то сделать с (2), сохраните хеш-карту в памяти и просто увеличьте количество выполненных соединений, но вы также можете отслеживать время.Вы хотите, чтобы структура данных была очень быстрой, поэтому вы можете решить, нужно ли вам отключить соединение раньше.
Например, если у вас есть два long в хэш-карте, вы можете указать время (в unixtime или тиках) первого соединения и увеличить его, и если вы получите 10 соединений менее чем за одну минуту,начать закрывать лишнее, пока не пройдет минута.Затем удалите этот элемент, если у него было достаточно продолжительное соединение, чтобы вы полагали, что он не атаковал вас.
Кроме того, убедитесь, что вы проверяете все передаваемые вам параметры и имеете разумные максимальные значения для любых строк.1025 *