Какие операционные системы вы рассматриваете для этого?
Если вы используете ОС Windows и используете что-то позже Vista, тогда у вас не должно быть проблем со многими тысячами подключений на одной машине. Я запускал тесты (здесь: http://www.lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html) с низкой спецификацией Windows Server 2003 и легко достигал более 70 000 активных TCP-соединений. Некоторые ограничения ресурсов, которые влияют на количество возможных соединений, были значительно увеличены в Vista (см. Здесь: http://www.lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html), и поэтому вы, вероятно, могли бы достичь своей цели с помощью небольшого набора машин. Я не знаю, что вам нужно, чтобы проложить маршруты.
В Windows предусмотрены средства ввода-вывода ввода-вывода (см.: http://msdn.microsoft.com/en-us/magazine/cc302334.aspx), которые позволяют обслуживать многие тысячи одновременных соединений с очень небольшим количеством потоков (вчера я запускал тесты с 5000 соединениями, насыщающими ссылку на сервер с 2 потоки для обработки ввода-вывода ...). Таким образом, базовая архитектура очень масштабируема.
Если вы хотите запустить несколько тестов, то у меня есть некоторые свободно доступные инструменты на моем блоге, которые позволяют трэш простой сервер эха, используя многие тысячи соединений (1) и (2) и некоторый свободный код, который вы могли бы использовать чтобы вы начали (3)
Вторая часть вашего вопроса, исходя из ваших комментариев, более сложна. Если IP-адрес клиента продолжает меняться, и между вами и ними нет ничего, что предоставляет NAT для предоставления вам последовательного IP-адреса, то их соединения, без сомнения, будут прекращены и должны быть восстановлены. Если клиенты обнаруживают, что это соединение срывается, когда их IP-адрес изменяется, то они могут повторно подключаться к серверу, если они не могут, я бы предположил, что клиентам необходимо периодически опроса сервера, чтобы они могли обнаружить потерю соединения и воссоединиться. Здесь ничего не может сделать сервер, поскольку он не может предсказать новый IP-адрес, и он обнаружит, что старое соединение потерпело неудачу, когда оно пытается отправить данные.
И помните, ваши проблемы только начинаются, как только вы получите вашу систему, чтобы масштабировать до этого уровня ...
Должен ли он быть TCP? Если трафик разрежен, стоимость отслеживания всех подключений может быть необоснованно высокой. И не могли бы вы немного рассказать о том, что сделает сервер? Миллион активных подключений, которые активно не используются, кажутся мне подозрительными. – VladV