Несколько сокетов на одном порту против нескольких сокетов на нескольких портах - PullRequest
2 голосов
/ 05 октября 2009

Позвольте мне объяснить мой сценарий, прежде чем задавать вопрос.

Я нахожусь в стадии создания 17 различных многопользовательских игр, в которые можно играть онлайн, прямо из браузера.
Для этого я выбрал Silverlight.
Связь будет осуществляться с помощью сокетов.

Image 17 различные типы игр, такие как шахматы, нарды, пул и сотни онлайн-пользователей, которые взаимодействуют между клиентским приложением и серверным приложением с помощью сокетов, привязанных к одному и тому же номеру порта. Не было бы быстрее (для моего сервера), если бы каждый другой тип игры использовал другой номер PORT? Шахматы будут использовать 4502, Нарды - 4503, Пул 4504.
Будет ли это иметь значение? Или я должен использовать один и тот же номер порта 4502 для всех игр, не опасаясь, что что-то плохое может случиться?

Ответы [ 2 ]

4 голосов
/ 05 октября 2009

Сокет, который был установлен как сервер, может принимать запросы на подключение от нескольких клиентов. Исходный сокет сервера не становится частью соединения. Метод accept создает новый сокет, который участвует в соединении и возвращает этот сокет. Исходный сокет сервера остается доступным для прослушивания дальнейших запросов соединения.

Таким образом, он не имеет преимуществ использовать разные порты сервера. После того, как все веб-серверы получат все свои запросы на порт 80 и очень хорошо справятся с этим.

3 голосов
/ 05 октября 2009

Что касается скорости обработки на вашем сервере, то, скорее всего, не будет иметь большого значения, получите ли вы все свои сообщения на одном сокете или на 17. Один подход сокетов будет чуть-чуть быстрее, поскольку ваше серверное приложение, вероятно, будет иметь меньше потоков для переключения. Однако будут другие вещи, которые будут иметь более высокие издержки, такие как фактическая обработка ходов игры или авторизация клиентских запросов и т. Д.

Что касается вопроса о том, использовать ли один или несколько сокетов, самое большое, о чем вы должны подумать - это ограничения развертывания. Номера портов TCP, которые Silverlight разрешено использовать нестандартные (т. Е. Не 80 или 443), и если между вашим клиентом и сервером есть брандмауэр или прокси-сервер, вам лучше придерживаться одного порта, чтобы сделать список контроля доступа доступным. брандмауэр проще.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...