URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID9
Нить номер: 3966
[ Назад ]

Исходное сообщение
"multithreading server"

Отправлено kostya , 15-Фев-05 23:09 
Пожалуйста помогите... уже голову сломал :(

Надо сделать многопотоковый сервер, который обслуживает мнооого клиентов.
по принципу работы похожий на irc сервер, только со своим простеньким протоколом.

т.е. для каждого клиента создаётся новый поток для каждого нового клиента, получаются

некоторые данные, обрабатываются, и отсылается ответ и ожидаются новые данные.
Как я понимаю нужно поступить так:
    1)создать поток
    2)считать данные
    3)записать данные через mutex в некоторый список(список, содержащий очередь

данных на обработку от нескольких потоков)
    х)обработать эти данные потоком, обрабатывающим полученные данные от потоков,

обрабатывающих сокеты
    4)разлочить mutex
    5)ждать новых данных
теперь вопрос... как обработать список  потоком, который эти данные должен обрабатывать?

т.е. как получить этим самым потоком конец списка или узнать что в списке данных есть

новые данные?

конечно всё вышеизложеное сумбурно, но у меня паника... не знаю что делать :(


Содержание

Сообщения в этом обсуждении
"Купи книжку."
Отправлено ZOD , 16-Фев-05 02:20 
Честно говоря не очень въехал.

> т.е. как получить этим самым потоком конец списка или узнать что в списке
> данных есть новые данные?

Связный список например или глобальная переменная взводимая при записи в список и грохаемая после чтения.


UNIX: разработка сетевых приложений  У. Р. Стивенс
http://www.piter.com/book/978531800534/
UNIX: взаимодействие процессов У. Р. Стивенс
http://www.piter.com/book/978531800535/


"Другое решение."
Отправлено Android , 16-Фев-05 07:06 
> х)обработать эти данные потоком, обрабатывающим полученные данные от потоков,
Если вы будете обрабатывать данные одним потоком, то  теряется смысл многопоточности, так как запросы клиентов будут обработаны последовательно.
Если вам нужна параллельная обработка запросов, то лучше выделить один поток
для ожидания соеденения.После поступления запроса на соеденение, этот поток
должен создаь новый поток, который будет принимать,обрабатывать отправляеть данные, после чего завершаться.Таким образом число потоков у вас будет переменным и зависить только от числа одновременно обрабатываемых запросов.


"multithreading server"
Отправлено Vladislav Lazarenko , 16-Фев-05 11:38 
В данном случае очень полезно было бы воспользоватся готовой вещью - CORBA. Эта штука уже заготовочек для многопотокового сервера.
Например, если вы используете C++, то я советовал бы ACE ORB (TAO).

Зачем изобретать велосипеды) Пишете IDL интерфейс, немного когда ... и у вас полнофункциональный enterprise чат сервер.

:-)


"multithreading server"
Отправлено kostya , 16-Фев-05 19:59 
>В данном случае очень полезно было бы воспользоватся готовой вещью - CORBA.
>Эта штука уже заготовочек для многопотокового сервера.
>Например, если вы используете C++, то я советовал бы ACE ORB (TAO).
>
>
>Зачем изобретать велосипеды) Пишете IDL интерфейс, немного когда ... и у вас
>полнофункциональный enterprise чат сервер.
>
>:-)

эээ :)
делаааа... тут надо основательно покопаться )
спасибо на интересную наводку )


"multithreading server"
Отправлено Dead Mustdie , 18-Фев-05 09:39 
Жестокий Вы советчик.
Человек хотел велосипед, а Вы ему сразу автопоезд предлагаете :).

"multithreading server"
Отправлено SergeiZz , 19-Фев-05 13:18 
>Жестокий Вы советчик.
>Человек хотел велосипед, а Вы ему сразу автопоезд предлагаете :).
Я бы ещё добавил, что озвученные затруднения от реализации зависят слабо, а
потому проявятся и с ACE (после полугодового изучения последней).