Я уже писал об этом здесь .
Пока вы можете спроектировать свою систему так, чтобы избежать накопления сокетов в TIME_WAIT
на сервере, вы должны быть в порядке сОС точка зрения на что-нибудь ВИСТА или позже.Вы можете избежать TIME_WAIT
на сервере, либо закрыв сокет на сервере с отключенным параметром linger, чтобы стек TCP отправлял RST
, а не FIN
ИЛИ, если клиент выдает активное закрытие и, следовательно, входит вTIME_WAIT
, а не сервер.
Вам необходимо подумать о скорости ваших приемов, поэтому используйте асинхронные приемы вызовов и публикуйте много из них, а также сделайте журнал ожидания прослушивания довольно большим.* Если вам нужен код для тестирования вашего сервера, у меня есть «мульти-клиентский тестовый комплект», который можно бесплатно загрузить с здесь .Он использует ConnectEx()
для выдачи настраиваемого числа асинхронных подключений одновременно со скоростью, управляемой из командной строки.Я говорю о его использовании немного больше здесь .
Если вы думаете об использовании C ++, а не C #, у меня есть несколько примеров серверов здесь и набор свободного кода на основе порта завершения ввода / вывода здесь .
Самое важное, ИМХО, это убедиться, что вы тестируете на желаемый уровень масштабируемости с Дня 0 .
Удачи!