Какие операционные системы вы рассматриваете для этого?
Если вы используете ОС 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 предоставляет средство под названием I / O Completion Ports (см .: http://msdn.microsoft.com/en-us/magazine/cc302334.aspx), которое позволяет обслуживать многие тысячи одновременных соединений с очень небольшим количеством потоков (вчера я проводил тесты с 5000 соединениями, насыщающими ссылку на сервер с 2-мя потоками для обработки ввода-вывода ...). Таким образом, базовая архитектура очень масштабируема.
Если вы хотите запустить несколько тестов, у меня есть несколько свободно доступных инструментов в моем блоге, которые позволяют вам подключать простой эхо-сервер, используя многие тысячи соединений ( 1 ) и ( 2 *). 1016 *) и некоторый бесплатный код, который вы могли бы использовать, чтобы начать работу ( 3 )
Вторая часть вашего вопроса, из ваших комментариев, более сложная. Если IP-адрес клиента продолжает меняться, и между вами и теми, кто предоставляет NAT, нет ничего, что могло бы дать вам согласованный IP-адрес, тогда их соединения, без сомнения, будут разорваны и их необходимо будет восстановить. Если клиенты обнаруживают, что это соединение разрывается при изменении их IP-адреса, они могут повторно подключиться к серверу, а если нет, то я бы предложил, чтобы клиенты периодически опрашивали сервер, чтобы они могли обнаружить потерю соединения и воссоединиться. Сервер ничего не может сделать здесь, так как он не может предсказать новый IP-адрес, и он обнаружит, что старое соединение не удалось, когда он попытается отправить данные.
И помните, ваши проблемы только начинаются, как только ваша система масштабируется до этого уровня ...