Jakie systemy operacyjne rozważasz w tym celu?
Jeśli używasz systemu operacyjnego Windows i używasz czegoś później niż Vista, nie powinieneś mieć problemu z wieloma tysiącami połączeń na jednym komputerze. Uruchomiłem testy (tutaj: http://www.lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html) z niską specyfikacją systemu Windows Server 2003 i łatwo osiągnąłem ponad 70 000 aktywnych połączeń TCP. Niektóre limity zasobów, które mają wpływ na liczbę możliwych połączeń, zostały znacznie podniesione w systemie Vista (patrz tutaj: http://www.lenholgate.com/blog/2005/11/windows-tcpip-server-performance.html), więc możesz prawdopodobnie osiągnąć swój cel za pomocą małej grupy komputerów. Nie wiem, czego potrzebujesz przed tymi, którzy kierują połączeniami.
System Windows udostępnia obiekt o nazwie Porty ukończenia operacji wejścia/wyjścia (zobacz: http://msdn.microsoft.com/en-us/magazine/cc302334.aspx), które umożliwiają obsługę wielu tysięcy równoczesnych połączeń przy użyciu bardzo niewielu wątków (wczytałem wczoraj testy z 5000 połączeń przesyłających łącze do serwera za pomocą 2 wątki do przetwarzania I/O ...). Zatem podstawowa architektura jest bardzo skalowalna.
Jeśli chcesz uruchomić kilka testów, to mam na swoim blogu kilka darmowych narzędzi, które pozwalają ci na wyrzucenie prostego serwera echa za pomocą wielu tysięcy połączeń (1) i (2) i trochę darmowego kodu, którego możesz użyć na początek (3)
Druga część twojego pytania, z twoich komentarzy, jest trudniejsza. Jeśli adres IP klienta ciągle się zmienia i nie ma nic między Tobą a nim, który zapewnia NAT w celu uzyskania spójnego adresu IP, wtedy ich połączenia bez wątpienia zostaną przerwane i trzeba będzie je przywrócić. Jeśli klienci wykryją to połączenie, oderwij się, gdy ich adres IP ulegnie zmianie, wtedy mogą ponownie połączyć się z serwerem, jeśli tego nie zrobi, sugerowałbym, aby klienci musieli odpytywać serwer co jakiś czas, aby wykryć utratę połączenia i na nowo połączyć. Nie ma tu nic, co mógłby zrobić serwer, ponieważ nie jest w stanie przewidzieć nowego adresu IP i odkryje, że stare połączenie nie powiodło się podczas próby wysłania danych.
I pamiętaj, że twoje problemy dopiero zaczynają, gdy pojawi się system skalowania do tego poziomu ...
Czy to musi być protokół TCP? Jeśli ruch jest niewielki, koszt śledzenia wszystkich połączeń może być nieuzasadniony wysoki. A czy mógłbyś trochę wyjaśnić, co zrobi serwer? Milion aktywnych połączeń, które nie są aktywnie używane, wydaje mi się podejrzany. – VladV