Russian Qt Forum

Qt => Работа с сетью => Тема начата: laeda от Май 13, 2006, 07:19



Название: Multithread server
Отправлено: laeda от Май 13, 2006, 07:19
Привет всем! Подскажите плиз. Надо написать сервер, который принимает запросы от клиентов и распределяет эти запросы по всем машинам, которые доступны в локальной сети, т.к. обьем вычислений очень большой. Нагрузка на эти машины распределяться тоже должна равномерно,т.е. они тоже должны быть многопотоковыми. Что лучше использовать Qsocket или QsocketDevice? Синхронный или асинхронный сервер? Что можно почитать на эту тему?


Название: Multithread server
Отправлено: Sergeich от Май 13, 2006, 15:07
Не кисло :) Все зависит от задачи. Что за запросы и какого типа вычисления? Какая сетка ( винда, линух или смесь ) ? Какая версия Qt?


Название: Multithread server
Отправлено: Admin от Май 14, 2006, 15:05
если нудно много считать а не передавать
то считают пакетами!

пакет обсчитал  - передал!


Название: Multithread server
Отправлено: Вудруф от Май 15, 2006, 13:14
Всё зависит от требований к задержкам. Если их должно быть как можно меньше, то пакетный способ подходит плохо. Если определённые допущения могут быть, то тогда после обсчёта достаточно большого пакета машина должна передавать результаты и обращаться за новым. Поскольку формируется очередь запросов, то в асимптотике получаем распределение работ пропорциональное мощности машин.
Если найдёшь что почитать - поделись, пожалуйста. У меня сходная задача в дипломной работе. Взамен могу порекомендовать почитать информацию по GRID-системам, скажем, здесь: http://www.research.ibm.com/journal/sj43-4.html


Название: Multithread server
Отправлено: laeda от Май 15, 2006, 14:46
задача ведь не на столько сложна. Пакеты очень маленькие, всего одна строчка и один int. Попробую описать задачу поподробнее. Клиент посылает этот маленький пакет диспетчеру. Диспетчер смотрит сколько потоков уже работает на каждой машине, и пересылает пакет на копм с мин количеством потоков. Та машина их обрабатывает(долго), и отсылает обратно диспетчеру. А диспетчер уже обратно клиенту. Qt у меня 3.3.3. Сеть может состоять как Windows, так и Unix машин.


Название: Multithread server
Отправлено: Sergeich от Май 15, 2006, 15:32
Гмм... интересный тип вычислений... похоже на подбор паролей... или что-то в этом духе...
  Можно сделать так: Создаешь два приложения: сервер-диспетчер и клиент на машине в локалке.
  В сервер-диспетчер впаиваешь два QServerSocket`а - один для общения с клиентами, другой для связи с машинами в локалке. На каждый коннект создаешь QSocket.
  В локальном клиенте также юзаешь QSocket для соединения с сервером-диспетчером. Обработка пакета производится на клиенте в отдельной нитке(потоке), перед завершением нитки ( в конце run() ) посылаешь событие с результатами обработки какому-нибудь объекту( к-ый обрабатывает сообщения от сокета) , затем этот объект пишет результат в сокет.
  При диспетчеризации необходимо учитывать кол-во процов на компе и их мощность, а не только число потоков.


Название: Multithread server
Отправлено: laeda от Май 15, 2006, 16:06
спасибо, Sergeich! буду пробовать


Название: Multithread server
Отправлено: Nikolay_S от Май 16, 2006, 19:28
Посмотри ссылки с www.distributed.ru