-
Какой разумный максимум для tcp соединений на 1 сервер? На 1 ip адрес? (для Windows и для Debian)
Предположим что сервер "вялый", основная его работа - это держать эти соединения и время от времени что-то обновлять в базе.
-
теоретический предел для ipv4 2^32
практический упирается в адресное пространство ОЗУ на 32битах 2Гб
1. объект сокет имеет r/s буфера обычно 8192+8192б (зависит от настроек ОС) + память под внутренние структуры хендла
2. объект поток имеет стек обычно в 1мб
2.1. в многопоточном сервере 1 сокет на поток
2.2. в остальных случаях (порты завершения и асинхронка) сколько потоков укажешь столько и будет, но плюс память под буфера склейки и прочую ерунду для борьбы с асинхронкой
3. тебе еще и в базу класть плюсуй и это
итого: больше всего конектов выдержит асинхронка и порты завершения, микрософт рекомендует порты завершения как самый "дешевый"
-
под линухом форкаться и ограничения на АП ОЗУ второстепенны
ограниечение под общий объем ОЗУ
-
Еще портов конечное количество
-
> Slym © (15.08.12 14:42) [1]
Спасибо за развернутый ответ. Почитаю про порты завершения. Я вообще себе представлял несколько потоков, в каждом с помощью вызовов select обслуживаются несколько соединений.
Вообще хотелось бы в пике иметь возможность обслуживать до 20 000 соединений, но на деле их скорее всего 1-3 тыс.
> под линухом форкаться
А использовать потоки в линуксе нежелательно? Вроде как тотже фрипаскаль позволяет их создавать.
> Еще портов конечное количество
Вот это больше всего смущает. 65000 всего их. Но вроде как этот вопрос решается дополнительными IP адресами сервера.
-
это прибинденых 2^16, а остальных (исходящих и ацептованых) предел оператива /настройки ос
сокет пира идентифицируется по адресу и порту пира - их может быть много больше 65535