Назад | Перейти на главную страницу

Ограничение TCP-соединений Windows Server 2008

Я запускаю свой собственный игровой сервер, созданный в .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.)