Много сокетов
От: oxenus  
Дата: 20.02.03 00:29
Оценка:
Такая вот задача:
(система : юниксовая)
Есть около 3000 сокетов, на любой из них могут приходить данные, либо коннекшн может разорваться.
Какие предложения, как управлять всеми сокетами одновременно?
соответсвенно надо вызывать select для проверки по timeout-у.

Нерациональный способ: создать 3000 потоков и дать каждому потоку по сокету.
Этот способ жрёт много памяти и так далее.


Кто-нибудь знает более оптимизированный алгоритм?
Re: Много сокетов
От: Алексей Мартынов Россия  
Дата: 20.02.03 07:04
Оценка:
Здравствуйте, oxenus, Вы писали:

O>Есть около 3000 сокетов, на любой из них могут приходить данные, либо коннекшн может разорваться.

O>Какие предложения, как управлять всеми сокетами одновременно?
O>соответсвенно надо вызывать select для проверки по timeout-у.

Так в чем проблема, последний параметр в select как раз и есть таймаут. Задай его в соответствующее значение и все. Индивидуальные таймауты по последней операции гнезда храни в каком-нибудь списке/массиве.

Вообще говоря, 3000 гнезд — это много, тем более на процесс. Возможно, стоит посмотреть реализацию Apache — там создается несколько процессов и входящие соединения распределяются между ними.
Алексей Мартынов
Re[2]: Много сокетов
От: J.J.OK  
Дата: 20.02.03 08:53
Оценка:
Здравствуйте, Алексей Мартынов, Вы писали:

АМ>Здравствуйте, oxenus, Вы писали:


O>>Есть около 3000 сокетов, на любой из них могут приходить данные, либо коннекшн может разорваться.

O>>Какие предложения, как управлять всеми сокетами одновременно?
O>>соответсвенно надо вызывать select для проверки по timeout-у.

АМ>Так в чем проблема, последний параметр в select как раз и есть таймаут. Задай его в соответствующее значение и все. Индивидуальные таймауты по последней операции гнезда храни в каком-нибудь списке/массиве.


АМ>Вообще говоря, 3000 гнезд — это много, тем более на процесс. Возможно, стоит посмотреть реализацию Apache — там создается несколько процессов и входящие соединения распределяются между ними.


... а с другой стороны — thttpd — очень простой, легкий и надежный веб-серверок, как раз написан без fork-ов — и просто хранит массив сокетов и обрабатывает все что есть в одном процессе ..
Чем безопаснеe — тем неудобнее ;-)
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.