Russian Qt Forum
Ноябрь 24, 2024, 05:03
Добро пожаловать,
Гость
. Пожалуйста,
войдите
или
зарегистрируйтесь
.
Вам не пришло
письмо с кодом активации?
1 час
1 день
1 неделя
1 месяц
Навсегда
Войти
Начало
Форум
WIKI (Вики)
FAQ
Помощь
Поиск
Войти
Регистрация
Russian Qt Forum
>
Forum
>
Qt
>
Общие вопросы
>
Принципы построения многопоточного сервера
Страниц: [
1
]
Вниз
« предыдущая тема
следующая тема »
Печать
Автор
Тема: Принципы построения многопоточного сервера (Прочитано 3643 раз)
Urvin
Гость
Принципы построения многопоточного сервера
«
:
Февраль 13, 2012, 15:13 »
Здравствуйте!
Подскажите, пожалуйста, как стоит реализовать оптимальный многопоточный сервер?
- Сервер будет держать около 50 клиентов постоянно подключенными;
- Общение происходит текстовыми строками в xml-подобном варианте. В основном по принципу запрос-ответ, но также сервер может рассылать команды самостоятельно, в т.ч. по запросу одного из клиентов;
- Необходима графическая среда для отслеживания ошибок и управления подключениями;
- В основном, в сервере сосредоточена несложная логика системы, но много SQL-запросов.
На примере fortune server и своих домыслов я бы сделал так:
1. Основной поток - для UI
2. В дополнительном потоке вертится постоянно слушающий порт QTcpServer и диспетчер подключений
3. Как только создается новое подключение, создается новый поток и новый сокет перенаправляется туда.
4. В потоке, обслуживающем сокет создается отдельное подключение к базе данных
Читая различные материалы, я понял, что это достаточное избыточное решение, слишком много потоков.
Как сделать правильно? Какова общая архитектура сервера?
Записан
andrew.k
Гость
Re: Принципы построения многопоточного сервера
«
Ответ #1 :
Февраль 13, 2012, 15:17 »
для 50 клиентов наверное по фигу как реализовывать.
А так на форуме уже много раз поднималась подобная тема. Правда все разбросано по темам.
Записан
Urvin
Гость
Re: Принципы построения многопоточного сервера
«
Ответ #2 :
Февраль 13, 2012, 15:23 »
Именно что все разбросано.
Не выходит в голове построить оптимальную модель.
Да, 50 клиентов - не так и много, но хочется же сделать правильно.
Записан
andrew.k
Гость
Re: Принципы построения многопоточного сервера
«
Ответ #3 :
Февраль 13, 2012, 15:27 »
Цитата: Urvin от Февраль 13, 2012, 15:23
Именно что все разбросано.
Не выходит в голове построить оптимальную модель.
Да, 50 клиентов - не так и много, но хочется же сделать правильно.
В целом идеология поток на соединение избыточна.
Поэтому один поток должен обслуживать некоторое количество соединений (пул соединений).
А какое количество соединений оптимально на один поток мне неизвестно)
Видимо нужно делать это параметром и смотреть как себя ведет сервер в нагрузке.
Записан
merke
Гость
Re: Принципы построения многопоточного сервера
«
Ответ #4 :
Февраль 13, 2012, 15:32 »
Ну так и создавай один поток коммуникатор, который занимается обслуживанием клиентов, а второй обработчик, который и занимается рутинной работой - обработка информации, получил что то, поставил в очередь, отдал потоку обработчика, принимаешь другие запросы, как только поток обработчик что то выполнил он передает потоку коммуникатору результат.
Записан
merke
Гость
Re: Принципы построения многопоточного сервера
«
Ответ #5 :
Февраль 13, 2012, 15:37 »
Просто видишь, сколько потоков не мути, количество процессоров у тебя не увеличится) а количество оперативной памяти на их обслуживание увеличится. Так что смысла в 100500 потоках не вижу, тут достаточно 3-х: главный - уи, 2-й коммуникатор, 3-й обработчик. И будет счастье, для синхронизации работы, или использовать стандартные средства для реализации очередей, либо писать свой класс очереди, под свои нужды(специфические форматы данных).
Записан
Fregloin
Супер
Offline
Сообщений: 1025
Re: Принципы построения многопоточного сервера
«
Ответ #6 :
Февраль 14, 2012, 15:35 »
Есть смысл использовать плавающий пул потоков
Записан
merke
Гость
Re: Принципы построения многопоточного сервера
«
Ответ #7 :
Февраль 14, 2012, 15:39 »
Цитата: Fregloin от Февраль 14, 2012, 15:35
Есть смысл использовать плавающий пул потоков
можно поподробнее об этом?
Записан
Страниц: [
1
]
Вверх
Печать
« предыдущая тема
следующая тема »
Перейти в:
Пожалуйста, выберите назначение:
-----------------------------
Qt
-----------------------------
=> Вопросы новичков
=> Уроки и статьи
=> Установка, сборка, отладка, тестирование
=> Общие вопросы
=> Пользовательский интерфейс (GUI)
=> Qt Quick
=> Model-View (MV)
=> Базы данных
=> Работа с сетью
=> Многопоточное программирование, процессы
=> Мультимедиа
=> 2D и 3D графика
=> OpenGL
=> Печать
=> Интернационализация, локализация
=> QSS
=> XML
=> Qt Script, QtWebKit
=> ActiveX
=> Qt Embedded
=> Дополнительные компоненты
=> Кладовая готовых решений
=> Вклад сообщества в Qt
=> Qt-инструментарий
-----------------------------
Программирование
-----------------------------
=> Общий
=> С/C++
=> Python
=> Алгоритмы
=> Базы данных
=> Разработка игр
-----------------------------
Компиляторы и платформы
-----------------------------
=> Linux
=> Windows
=> Mac OS X
=> Компиляторы
===> Visual C++
-----------------------------
Разное
-----------------------------
=> Новости
===> Новости Qt сообщества
===> Новости IT сферы
=> Говорилка
=> Юмор
=> Объявления
Загружается...