Как построить сервер, который принимает много тысяч постоянных сетевых подключений? - PullRequest
1 голос
/ 14 декабря 2009

Я собираюсь построить сервер под Linux (я выбираю язык программирования), который принимает множество постоянных соединений сокетов TCP / IP из настольного программного обеспечения. Как это можно сделать дешево и эффективно? На машине не может быть более 60000 портов, поэтому, если мне потребуется поддержка 600k-подключений, мне понадобится 10 ящиков Linux?

Поскольку вычисления, необходимые для каждого соединения, чрезвычайно малы (бездействуют в 95% случаев), один ящик Linux уже может обрабатывать 600 тыс. Я не хочу тратить деньги и ресурсы на 10 коробок, просто чтобы обойти ограничения порта. *

Есть идеи?

Ответы [ 4 ]

6 голосов
/ 14 декабря 2009

Соединение идентифицируется следующим кортежем: [IP-адрес сервера; Порт сервера; Клиентский IP; Клиентский порт], следовательно, более 60 000 портов доступны для каждой машины.

Erlang эффективно обрабатывает 10 из 1000 соединений. Посмотрите на это сравнение между Apache и Erlang Yaws.

1 голос
/ 14 декабря 2009

Поскольку любой относительно широко используемый язык имеет достаточно эффективную библиотеку сокетов, я выбрал бы язык, который:

  1. Эффективен при любой обработке данных с настольных компьютеров
  2. Вы достаточно знакомы (читай; наиболее знакомы), чтобы избежать наиболее распространенных ошибок / шаблонов проектирования
1 голос
/ 14 декабря 2009

Вам НЕ нужен порт для каждого соединения. HTTP-сервер будет использовать только один порт (обычно 80).

0 голосов
/ 15 декабря 2009

Вы должны быть в состоянии сделать это легко с любой приличной структурой. Мы используем Twisted, который хорош (при условии, что вы понимаете Python и асинхронное программирование), если немного странно понять.

Асинхронное программирование в значительной степени само собой разумеющееся, потому что вы, вероятно, НЕ захотите запускать потоки 600k.

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