2010-05-08 6 views
4

Если вы работаете с асинхронным серверным сокетом на C#, каков надлежащий резерв для установки на сокет? Например:Какое правильное отставание для асинхронного сокета сервера?

server = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp); 
IPEndPoint iep = new IPEndPoint(IPAddress.Any, port); 
server.Bind(iep); 
server.Listen(10); 
+1

Я всегда стараюсь использовать '5', но у меня нет остро аргументированного объяснения« почему »- это просто по умолчанию, который я всегда использовал для всех сокетов прослушивания, асинхронных или нет ;-) –

ответ

3

В большинстве приложений, скорее всего, сам слушатель не является узким местом. Чаще всего вам нужно отвечать на эти запросы TCP, выполняя какую-то работу, и количество работников, которое ваше приложение может эффективно использовать за один раз, будет меньше, чем количество подключений, которое теоретически может поддерживать.

Это, вероятно, объясняет, «правило большого пальца» Алекс Мартелли в в комментариях:

Я всегда предпочитаю использовать 5, но я не не резко рассуждал объяснение почему.

На четырехъядерном сервере это имеет смысл, если клиенты начинают задачи с интенсивным использованием ЦП; 4 соединения для 4 работников/нитей/ядер и еще один, чтобы поддерживать обслуживание в случае его тяжелой загрузки.

Если ваша работа не требует интенсивного использования ресурсов, то приведенное выше ограничение/пояснение для вас не имеет значения, вы можете управлять 10 или 50 подключениями или вам может потребоваться использование некоторого ресурса, исключительного для машины, и разрешить один. Я в основном согласен с Hans в том, что для этого нет сложного и быстрого «правильного ответа», вам нужно посмотреть, что делает ваше приложение, оценить, сколько соединений вы считаете возможным, и настроить его для максимальная эффективность путем тестирования.

Смежные вопросы