PDA

Показать полную графическую версию : Максимальное количество соединений


new_bee
14-03-2014, 13:13
Здравствуйте. Я пишу с многопоточное приложение неблокирующих сокетах, каждый из потоков которого, отправляет и принимает данные. Это некий сервер, к которому одновременно коннектится разное количество клиентов. Так вот, проблема в том, что когда число подключений достигает скажем 200 или же 500, то 30% стабильно висят в таймауте и выходят из него только тогда, когда эти же 30% уже закончили передачу данных. Есть предположение, что ограничение есть где-то в настройках или же драйвере. Скажите, сколько подключений(практически, а не теоретически) может быть одновременно открыто в Windows? Почему при большом количестве подключений, страницы в браузере открываются как на Dial-up'e, хотя используется только 40-60% интернет канала?

Тех характеристики:
Windows 7 x64 build 7601 SP1
Сетевая карта RTL 8168C, драйвер 7.2.1127.2008
Интернет 100МБит/с

Dzirt2005
14-03-2014, 14:45
new_bee, в Windows нет никаких ограничений на количество соединений (ну кроме количества портов 65535 - уже используемые системой и системными приложениями) и проблема ваша связана совсем не с этим. При этом не следует слова "нет никаких ограничений на количество соединений" читать как "любая программа может безболезненно открыть 20-30 тысяч соединений". Я стесняюсь спросить - вы когда пишете "число подключений достигает скажем 200 или же 500" это и означает "я запускаю 200 или же 500 потоков для обработки"?

new_bee
15-03-2014, 00:49
это и означает "я запускаю 200 или же 500 потоков для обработки"? »
Да, именно это и значит. Считаете что проблема кроется в моей программе? Ведь по сути, если в ОС нет никаких ограничений, то даже если моя программа написана криво, это никак не может влиять на скорость. Количество данных, передаваемых моей программой гарантированно меньше ширины канала

LehaMechanic
15-03-2014, 09:11
Есть предположение, что ограничение есть где-то в настройках или же драйвере. Скажите, сколько подключений(практически, а не теоретически) может быть одновременно открыто в Windows? »

Есть ограничение на одновременное подключение пользователей - не более 20. Пруф (http://answers.microsoft.com/ru-ru/windows/forum/windows_7-windows_install/здравств/5940db67-28c4-4094-911a-79cf4aa91376). Не знаю, актуально ли это в вашем случае.
Но есть смысл установить серверную ОС и проверить на ней - там точно со всеми ограничениями помягче.

new_bee
15-03-2014, 13:57
одновременное подключение пользователей - не более 20 »
На сколько я понял, это справедливо для доступа к компьютеру постредством учетных записей(например к расшареным ресурсам). В моем случае все немного иначе. Попробую потестить на 2003 сервере...

Dzirt2005
15-03-2014, 20:25
Да, именно это и значит. Считаете что проблема кроется в моей программе? »
Что тут считать? Я не думаю, что у вас хотя бы стоядерный процессор... ;) Вы на полном серьезе считаете, что 500 потоков могут одновременно _работать_ на даже 4-х ядерном процессоре? Вобщем, обсуждать тут нечего. Хотите писать высоконагруженные сервера для большого количества соединений - потрудитесь хотя бы немного изучить матчасть, без этого вы далеко не уйдете.

На сколько я понял, это справедливо для доступа к компьютеру постредством учетных записей »
Правильно поняли. Никакого отношения к соединениям по TCP/IP (на сокетах по вашей терминологии) это не имеет.




© OSzone.net 2001-2012