Каков верхний предел количества открытых сокетов, которые я могу иметь в Windows Server 2003? - PullRequest
2 голосов
/ 27 февраля 2009

Я создаю чат-сервер с .NET. Я попытался открыть около 2000 клиентских подключений, и мой маршрутизатор Linksys WRT54GL (с томатной прошивкой) каждый раз зависал. То же самое происходит, когда на моем клиенте Azureus bit-torrent открыто несколько соединений.

У меня три вопроса:

  1. Есть ли ограничение на количество открытых сокетов, которые я могу иметь в Windows Server 2003?
  2. Является ли проблема с маршрутизатором Linksys? Если да, то есть ли лучшее оборудование, рекомендованное?
  3. Есть ли способ обмениваться сокетами, чтобы я мог обрабатывать больше открытых клиентских подключений с меньшим количеством ресурсов?

Ответы [ 4 ]

2 голосов
/ 27 февраля 2009

я нашел это (http://smallvoid.com/article/winnt-tcpip-max-limit.html), когда искал похожую вещь для Windows XP, я думаю, что это должно относиться к Windows 2003

2 голосов
/ 11 марта 2009

Я нашел несколько ответов на этот вопрос, которые, как мне кажется, я должен поделиться:

Сервер Windows 2003 имеет ограничение на количество портов, которые могут быть использованы. но это можно настроить с помощью настройки реестра, чтобы изменить параметр MaxUSerPort с 5000, скажем, 64 КБ (макс.).

Исследуя далее, я понимаю, что ограничение порта 64 КБ фактически относится к IP-адресу, следовательно, один сервер может легко получить гораздо больше портов и, следовательно, TCP-подключений, либо установив несколько сетевых карт, либо привязав более одного IP-адреса к сетевая карта. таким образом, вы можете масштабировать вашу систему для обработки n x 64 тыс. портов.

2 голосов
/ 27 февраля 2009

Как я уже говорил, Раймонд Чен дает хороший совет по этому вопросу: если вам нужно спросить об ограничениях ОС, вы, вероятно, делаете что-то не так. Протокол IP позволяет использовать не более 65535 портов, и многие из них зарезервированы и недоступны для общего использования. Я хотел бы предложить, чтобы ваши протоколы обмена сообщениями были продуманы более подробно, чтобы ограничения ОС не были проблемой. Я уверен, что есть много хороших ресурсов, описывающих такие системы, и, конечно, здесь есть люди, у которых есть хорошие идеи об этом.

РЕДАКТИРОВАТЬ: Я собираюсь подумать о реализации масштабируемого сервера чата.

Прежде всего, назначьте один порт на сервере, через который клиенты будут обмениваться данными. Всякий раз, когда клиенту необходимо обновить состояние чата (например, новое сообщение пользователя), выполните следующие действия:

create message packet
open port to server
send packet
close port

Затем сервер выполняет следующие действия:

connection request received
get packet
close connection
process packet
for each client that requires updating
  open connection to clients
  send update packet
  close connection

Когда начинается новый сеанс чата, клиент, запускающий сеанс, отправляет на сервер сообщение «новый сеанс» с информацией о клиентах и ​​IP-адресом для ответов. Сервер создает новый сеанс чата и отвечает идентификатором сеанса. Затем клиент отправляет пакеты, содержащие сообщения, которые вводит пользователь, сервер обрабатывает их и пересылает сообщение другим клиентам в том же сеансе. Когда клиент покидает чат, он отправляет сообщение «завершить сеанс» на сервер. Сервер удаляет клиента из сеанса и уничтожает сеанс, когда в сеансе больше нет клиентов.

Надежда, которая заставляет задуматься.

1 голос
/ 20 мая 2013

В течение нескольких дней была проблема с доступными сокетами на моем компьютере с Windows 7. Прочитав несколько статей о утечках сокетов в Win 7, я применил исправление Windows - ничего не изменилось.

Ниже приведена статья, подробно описывающая проблемы подключения Windows: http://technet.microsoft.com/en-us/magazine/2007.12.network.aspx

У меня сработало следующее:

  1. Открыть Regedit
    • HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ Tcpip \ Параметры: Создать TcpNumConnections, REG_DWORD, десятичное значение 500 (это можно установить в соответствии с вашими потребностями); EnableConnectionRateLimiting, REG_DWORD, значение 0;
    • HKEY_LOCAL_MACHINE \ SYSTEM \ CurrentControlSet \ services \ Tcpip: Создать MaxUserPort, REG_DWORD, десятичное значение 65534
  2. Перезагрузка Windows
...