Я запускаю свой собственный игровой сервер, созданный в .net 4.5, на Windows Web Server 2008 VPS. Я провел небольшое исследование проблемы, которая у меня есть. Мое приложение не принимает клиентов, если уже подключено 1000 клиентов. Это приложение в основном представляет собой один процесс, на котором запущено шесть серверов Socket (каждый на разных портах), и в его коде нет ограничений для подключенных клиентов. Вот некоторая статистика:
-------------------------------Server ID: 0 stats
[22-03-2014 14:37:39] Stats: Players online: 160
[22-03-2014 14:37:39] Stats: Connections: 164
-------------------------------Server ID: 1 stats
[22-03-2014 14:37:39] Stats: Players online: 515
[22-03-2014 14:37:39] Stats: Connections: 535
-------------------------------Server ID: 2 stats
[22-03-2014 14:37:39] Stats: Players online: 108
[22-03-2014 14:37:39] Stats: Connections: 111
-------------------------------Server ID: 3 stats
[22-03-2014 14:37:39] Stats: Players online: 59
[22-03-2014 14:37:39] Stats: Connections: 61
-------------------------------Server ID: 4 stats
[22-03-2014 14:37:39] Stats: Players online: 74
[22-03-2014 14:37:39] Stats: Connections: 75
-------------------------------Server ID: 5 stats
[22-03-2014 14:37:39] Stats: Players online: 52
[22-03-2014 14:37:39] Stats: Connections: 54
-----------------------------------Total stats
[22-03-2014 14:37:39] Stats: Total players: 968
[22-03-2014 14:37:39] Stats: Total connected: 1000
Клиенты «Player» - это игроки, вошедшие в систему, а «подключенные клиенты / соединения» - это количество сокетов, прослушиваемых одновременно (игроки, вошедшие в систему + игроки, входящие в систему). Это ограничение Windows Web Server 2008?
Мне кажется, что вы можете нарушить лицензионное соглашение, поскольку используете 2008 Web Edition:
Из Вот:
Windows Web Server 2008 специально разработан для использования в качестве одноцелевого веб-сервера. Он предназначен только для доступа в Интернет, внешнего веб-обслуживания веб-страниц, веб-сайтов и веб-приложений.
В любом случае, Web Edition Server 2008 действительно имеет ограничение в 10 одновременных полуоткрытый TCP-соединения, но нет разумного ограничения на активные TCP-соединения, согласно этот сотрудник Microsoft:
Это зависит от выпуска, выпуски Web и Foundation имеют ограничения на количество подключений, а Standard, Enterprise и Datacenter - нет.
Но если вы постоянно видите, что количество подключений постоянно составляет ровно 1000, то я еще не уверен, что полуоткрытые TCP-подключения - это ваша проблема. Не могу сказать больше, не изучив код.
Но вам, вероятно, все равно следует отказаться от Web Edition, поскольку вы используете его для чего-то другого, кроме запуска веб-сервера. Итак, лучший ответ, который, я думаю, вы получите, учитывая предоставленную вами информацию, - нет, нет ограничения на количество активных TCP-соединений, которое составляет где-то около 1000, которое налагается либо операционной системой, либо платформой .NET. Он способен справиться со многими, многими другими вещами.
Изменить: я полагаю, вы могли бы попробовать изменить ключ реестра HKLM\SYSTEM\CurrentControlSet\Services\Tcpip\Parameters\EnableConnectionRateLimiting
до 0, но это может работать, а может и не работать из-за вашей веб-версии Windows Server, а также открыть вас для возможных атак отказа в обслуживании (если у вас действительно есть проблема с полуоткрытыми TCP-соединениями, что я еще не уверены, что это так. Запустите netstat и посмотрите, есть ли у вас группа соединений, которые, кажется, застряли в состоянии SYN_SENT.)