Обработка большого количества сокетов с помощью .NET - PullRequest
0 голосов
/ 12 января 2011

Я смотрю на написание приложения, которое должно уметь обрабатывать в области 200 соединений / сек, и мне было интересно, справятся ли C # и .NET с этим или мне действительно нужно смотреть на C ++, чтобы сделать это?

Похоже, что SocketAsyncEventArgs может быть подходящим вариантом, но перед тем, как я к нему подключусь, необходимо проверить идентификатор.

Каждая транзакция должна длиться менее секунды, но может занять до 15 секундкаждый, если это имеет какое-либо значение.

Ответы [ 2 ]

3 голосов
/ 12 января 2011

Вы столкнетесь с ограничениями операционной системы, если попытаетесь сохранить этот уровень использования.Срок действия ваших эфемерных портов истекает довольно быстро.

Если вам просто нужно обработать очередей большого количества соединений, тогда .NET должен быть в состоянии справиться с этим, как C ++;вам может потребоваться настроить параметр backlog на Listen.

2 голосов
/ 12 января 2011

Я уже писал об этом здесь .

Пока вы можете спроектировать свою систему так, чтобы избежать накопления сокетов в TIME_WAIT на сервере, вы должны быть в порядке сОС точка зрения на что-нибудь ВИСТА или позже.Вы можете избежать TIME_WAIT на сервере, либо закрыв сокет на сервере с отключенным параметром linger, чтобы стек TCP отправлял RST, а не FIN ИЛИ, если клиент выдает активное закрытие и, следовательно, входит вTIME_WAIT, а не сервер.

Вам необходимо подумать о скорости ваших приемов, поэтому используйте асинхронные приемы вызовов и публикуйте много из них, а также сделайте журнал ожидания прослушивания довольно большим.* Если вам нужен код для тестирования вашего сервера, у меня есть «мульти-клиентский тестовый комплект», который можно бесплатно загрузить с здесь .Он использует ConnectEx() для выдачи настраиваемого числа асинхронных подключений одновременно со скоростью, управляемой из командной строки.Я говорю о его использовании немного больше здесь .

Если вы думаете об использовании C ++, а не C #, у меня есть несколько примеров серверов здесь и набор свободного кода на основе порта завершения ввода / вывода здесь .

Самое важное, ИМХО, это убедиться, что вы тестируете на желаемый уровень масштабируемости с Дня 0 .

Удачи!

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