The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]




Версия для распечатки Пред. тема | След. тема
Новые ответы [ Отслеживать ]
multithreading server, !*! kostya, 15-Фев-05, 23:09  [смотреть все]
Пожалуйста помогите... уже голову сломал :(

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

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

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

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

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

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

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

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

  • Купи книжку., !*! ZOD, 02:20 , 16-Фев-05 (1)
    Честно говоря не очень въехал.

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

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


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

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

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

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

    :-)

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

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

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




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2024 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру