Пожалуйста помогите... уже голову сломал :(Надо сделать многопотоковый сервер, который обслуживает мнооого клиентов.
по принципу работы похожий на irc сервер, только со своим простеньким протоколом.т.е. для каждого клиента создаётся новый поток для каждого нового клиента, получаются
некоторые данные, обрабатываются, и отсылается ответ и ожидаются новые данные.
Как я понимаю нужно поступить так:
1)создать поток
2)считать данные
3)записать данные через mutex в некоторый список(список, содержащий очередьданных на обработку от нескольких потоков)
х)обработать эти данные потоком, обрабатывающим полученные данные от потоков,обрабатывающих сокеты
4)разлочить mutex
5)ждать новых данных
теперь вопрос... как обработать список потоком, который эти данные должен обрабатывать?т.е. как получить этим самым потоком конец списка или узнать что в списке данных есть
новые данные?
конечно всё вышеизложеное сумбурно, но у меня паника... не знаю что делать :(
Честно говоря не очень въехал.> т.е. как получить этим самым потоком конец списка или узнать что в списке
> данных есть новые данные?Связный список например или глобальная переменная взводимая при записи в список и грохаемая после чтения.
UNIX: разработка сетевых приложений У. Р. Стивенс
http://www.piter.com/book/978531800534/
UNIX: взаимодействие процессов У. Р. Стивенс
http://www.piter.com/book/978531800535/
> х)обработать эти данные потоком, обрабатывающим полученные данные от потоков,
Если вы будете обрабатывать данные одним потоком, то теряется смысл многопоточности, так как запросы клиентов будут обработаны последовательно.
Если вам нужна параллельная обработка запросов, то лучше выделить один поток
для ожидания соеденения.После поступления запроса на соеденение, этот поток
должен создаь новый поток, который будет принимать,обрабатывать отправляеть данные, после чего завершаться.Таким образом число потоков у вас будет переменным и зависить только от числа одновременно обрабатываемых запросов.
В данном случае очень полезно было бы воспользоватся готовой вещью - CORBA. Эта штука уже заготовочек для многопотокового сервера.
Например, если вы используете C++, то я советовал бы ACE ORB (TAO).Зачем изобретать велосипеды) Пишете IDL интерфейс, немного когда ... и у вас полнофункциональный enterprise чат сервер.
:-)
>В данном случае очень полезно было бы воспользоватся готовой вещью - CORBA.
>Эта штука уже заготовочек для многопотокового сервера.
>Например, если вы используете C++, то я советовал бы ACE ORB (TAO).
>
>
>Зачем изобретать велосипеды) Пишете IDL интерфейс, немного когда ... и у вас
>полнофункциональный enterprise чат сервер.
>
>:-)эээ :)
делаааа... тут надо основательно покопаться )
спасибо на интересную наводку )
Жестокий Вы советчик.
Человек хотел велосипед, а Вы ему сразу автопоезд предлагаете :).
>Жестокий Вы советчик.
>Человек хотел велосипед, а Вы ему сразу автопоезд предлагаете :).
Я бы ещё добавил, что озвученные затруднения от реализации зависят слабо, а
потому проявятся и с ACE (после полугодового изучения последней).