![]() |
|
Модераторы: feodorv |
![]()
|
|
| DominiK |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 11.3.2007 Где: Россия, Омск Репутация: нет Всего: нет |
Есть задача написать многопоточный сервер, который будет работать с базой mysql, и держать одновременно нагрузки до 1-2к клиентов, (клиент спросил - сервер глянул в базу, вытянул данные - клиент получил), объемы данных не большие, реализацию данной задачи нужно делать под windows 2003 сервер. Суть темы - для примера хотел бы перелопатить пару исходников с одновременно не сложной и стабильной архитектурой подобного сервера, исходники\названия приложений, хочу спросить у гуру, те кто писал подобные вещи, откликнетесь. Своя реализация в голове рождается, но всё таки хочу опираться на какую то базу, чтобы не допускать ошибок лишних, вообщем хочу пример, может литературу посоветуйте почитать какую то, спасибо
Это сообщение отредактировал(а) DominiK - 13.10.2008, 10:50 |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 5 Всего: 154 |
ИМХО, нужно создать пулл потоков, количество потоков должно зависеть от железа, а не от количества подключенных клиентов, например количество ядер*2, работать с клиентами асинхронно, перо БД ничего не скажу...
можно использовать boost::asio |
|||
|
||||
| DominiK |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 11.3.2007 Где: Россия, Омск Репутация: нет Всего: нет |
upload.wikimedia.org/wikipedia/commons/thumb/0/0c/Thread_pool.svg/400px-Thread_pool.svg.png
Рассмотрел бы вот такую вот реализацию |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 6 Всего: 207 |
DominiK,
один поток - accept-ор остальные N (как сказал Lazin, зависящие от параметров системы) - рабочие есть матрица дескрипторов потоков N * M accept-ор устанавливает соединения и связывает их с дескрипторами у каждого рабочего потока свои M дескрипторов резонно использовать пул соединений с БД для каждого такого потока, чтобы избежать синхронизации и макисмально распараллелить операции работа потоков с дескрипторами будет зависеть от модели используемого I/O (самые производительные: неблокируемый и асинхронный) я бы использовал модель асинхронного I/O -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 5 Всего: 154 |
это для того, что-бы данные от каждого соединения обрабатывались всегда одним и тем-же потоком, для того что-бы оптимально использовался кэш процессора, я правильно понял? |
|||
|
||||
| DominiK |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 11.3.2007 Где: Россия, Омск Репутация: нет Всего: нет |
Посоветуйте исходник где есть подобная реализация или нечто приближенное к этому, надо живой пример
|
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 6 Всего: 207 |
нет, ты не понял матрица заполняется динамически аккептором нужно это для того, чтобы избежать необходимости просмотра каждым потоком всех соединений -------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| DominiK |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 11.3.2007 Где: Россия, Омск Репутация: нет Всего: нет |
Макс, у тебя есть личные наработки по этой теме, которыми можешь поделиться? Мне надо 1 раз увидеть реальный пример, возможно выполняющий простые задачи, и на базе его уже можно отталкиваться в нужную сторону! |
|||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 5 Всего: 154 |
Тебе нужно использовать IO Completion Ports, в MSDN наверняка есть примеры использования, так-же можно использовать библиотеки, лично я использую для этого boost::asio, в документации хватает примеров, но это не единственный вариант
Добавлено через 3 минуты и 57 секунд Boost.Asio.Exemples |
|||
|
||||
| DominiK |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 11.3.2007 Где: Россия, Омск Репутация: нет Всего: нет |
Дружище я бутс не осбо использовал, хотя это будет в повод в нём разобраться, но на это надо время, которого у меня не много |
|||
|
||||
| Олег2005 |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 421 Регистрация: 26.5.2005 Где: Рига Латвия Репутация: 6 Всего: 11 |
||||
|
||||
| J0ker |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 986 Регистрация: 17.9.2008 Репутация: 1 Всего: 14 |
||||
|
||||
| Lazin |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 3820 Регистрация: 11.12.2006 Где: paranoid oil empi re Репутация: 5 Всего: 154 |
как уже сказали, boost использует completion ports, и из буста, для использования asio нужно знать boost::date_time(если будешь использовать таймеры), boost::shared_ptr, boost::enable_shared_from_this, boost::bind и boost::function вот пожалуй и все причем boost::shared_ptr, boost::enable_shared_from_this можешь и не использовать, но они используются в exemple-ах |
|||
|
||||
| DominiK |
|
||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 77 Регистрация: 11.3.2007 Где: Россия, Омск Репутация: нет Всего: нет |
Как сговорились прям |
||||
|
|||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Сети | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |