Модераторы: bsa

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> стоит ли писать HTTP сервер на MFC? интерфейс написан на MFC 
V
    Опции темы
igsilya
Дата 24.5.2011, 22:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 12.9.2009

Репутация: нет
Всего: нет



Цитата(boostcoder @  24.5.2011,  21:01 Найти цитируемый пост)
по потоку на клиента - тупиковая архитектура.



на сколько мне известно (я конечно могу ошибаться) большинство современных серверов (apache например) используют пулы потоков без всякой там адской асинхроники (честно не совсем понял ту документацию, что вы предложили) и прекрасно справляются даже с очень большими нагрузками.
PM MAIL   Вверх
boostcoder
Дата 24.5.2011, 22:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(igsilya @  24.5.2011,  22:19 Найти цитируемый пост)
большинство современных серверов (apache например) используют пулы потоков

ну так не архитектуру "клиент = поток". хотя исходников апача не видел. но тупиковость архитектуры очевидна. вряд-ли они такое гэ закодили.

PM WWW   Вверх
igsilya
Дата 24.5.2011, 22:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 12.9.2009

Репутация: нет
Всего: нет



насколько я понимаю пул потоков без асинхроники выглядит так:
куча потоков ждет соединения.
когда приходит соединение, один из потоков разблокируется и уходит на обработку запроса. остальные ждут.
если приходит еще соединение, то какой-то другой поток разблокируется и уходит на его обработку.
когда какой-либо поток освобождается , то он снова становится в очередь за соединениями.

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

здесь как раз 1 поток = 1  запрос.

или я чего-то не понимаю?
PM MAIL   Вверх
boostcoder
Дата 24.5.2011, 22:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



все не так.
говоря об пуле потоков и asio, имеется ввиду, что пул потоков используется для обработки задач io_service`а. 
клиентов/подключений/чтений/записей, или чего бы то ни было еще, в терминах asio не существует. есть только задачи. а операции с сокетами - это процедуры формирующие задачи предназначенные для работы с сокетами.

PM WWW   Вверх
asmdzen
Дата 24.5.2011, 22:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: 3
Всего: 5



В общем это задание, нужно было написать прогу типа прокси, у нее есть интерфейс на мфк который показывает лог. Загвоздка была в том что я с мфк знаком был только отдаленно, но все же интерфейс добил. Остался сам прокси, парадокс в том что я с интернет трафиком знаком очень близко - писал снифферы/грабберы, протоколы понимаю нормально, но вот с сокетами редко связывался - и то для отправки файлов или каких-то пингов.
Прокси уже пишу на мфк так как нашел вроде нормальные примеры. Мне тоже непонятна идея с пулом потоков если каждый запрос обрабатывается не отдельным потоком.

запрещено использовать что-либо кроме мфк, стл и буста.

Это сообщение отредактировал(а) asmdzen - 24.5.2011, 23:00
PM MAIL   Вверх
boostcoder
Дата 24.5.2011, 22:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



libevent кстати, устроенна по такому же принципу. только менее абстрагирована. ибо там задачи идентифицируются по дескриптору(файловому/сокетному).
в asio же, задачей может быть что угодно. в прямом смысле.

PM WWW   Вверх
asmdzen
Дата 24.5.2011, 22:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: 3
Всего: 5



boostcoder, получается значит не совсем асинхронно, ведь если на все потоки пула придет по команде типа Receive то они все зависнут на время, не так?
PM MAIL   Вверх
boostcoder
Дата 24.5.2011, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



igsilya, asmdzen, касательно пула потоков и asio - вы все неверное понимаете. очень рекомендую читать доку с самого начала и до конца.
пул потоков в asio используется только для обработки задач io_service`ом. в коде, при работе с сокетами, не нужно знать о том что используется пул потоков. io_service сам распределяет задачи(в данном случае задачи для работы с сокетами) между потоками пула.

PM WWW   Вверх
igsilya
Дата 24.5.2011, 23:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 12.9.2009

Репутация: нет
Всего: нет



кто в лес, кто по дрова.
я говорю о чистых сокетах без использования сторонних библиотек-оберток и надстроек.

Добавлено через 5 минут и 25 секунд
Цитата(boostcoder @  24.5.2011,  23:04 Найти цитируемый пост)
пул потоков в asio используется только для обработки задач io_service`ом

так основное время работы сервера как раз и занимают операции ввода-вывода(http сервер по сути больше ничего делать и не должен) 

Цитата(boostcoder @  24.5.2011,  23:04 Найти цитируемый пост)
io_service сам распределяет задачи(в данном случае задачи для работы с сокетами) между потоками пула.


=> весь сервер исходя из ваших слов т.е. его I/O часть работает как раз по принципу , похожему на тот который я описал.


PM MAIL   Вверх
boostcoder
Дата 24.5.2011, 23:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(asmdzen @  24.5.2011,  22:59 Найти цитируемый пост)
не так?

не совсем. тут еще важно понимать, что разные задачи реализованы по разному.
к примеру задачи чтения/записи из/в сокет, в недрах asio, разбиваются на подзадачи. т.е. из сокета в один момент времени читается столько байт, сколько можно прочесть без блокировки. т.е. если вы выполнили async_read() для 1024 байт а для чтения доступно только 32 - то прочтется только 32. остальные прочтутся когда будут доступны. таким образом, задачи чтения/записи делятся на подзадачи. не явно. но задача полностью завершится тогда, когда сумма прочитанных байт всеми подзадачами будет равна 1024.
PM WWW   Вверх
asmdzen
Дата 24.5.2011, 23:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: 3
Всего: 5



boostcoder, спасибо за объяснение, просто при просмотре примеров на бусте волосы дыбом встают - много новых элементов, например я никогда не использовал boost::bind, а он там постоянно мелькает )
потом надо будет объяснять что это делает в моем коде )
насколько я понял boost::asio и есть самый выгодный вариант (особенно если он сам работает с пулом smile)
PM MAIL   Вверх
boostcoder
Дата 24.5.2011, 23:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


Профиль
Группа: Завсегдатай
Сообщений: 5458
Регистрация: 1.4.2010

Репутация: 20
Всего: 110



Цитата(igsilya @  24.5.2011,  23:04 Найти цитируемый пост)
я говорю о чистых сокетах без использования сторонних библиотек-оберток и надстроек.

я говорю об asio. на протяжении всей дискуссии.

Цитата(igsilya @  24.5.2011,  23:04 Найти цитируемый пост)
весь сервер исходя из ваших слов т.е. его I/O часть работает как раз по принципу , похожему на тот который я описал.

от части. но очень отдаленно.

Добавлено @ 23:15
asmdzen, кстати http-proxy: http://alexott.net/ru/cpp/BoostAsioProxy.html
и еще, на libevent: http://monkey.org/~marius/pages/?page=nylon


Это сообщение отредактировал(а) boostcoder - 24.5.2011, 23:18
PM WWW   Вверх
igsilya
Дата 24.5.2011, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 23
Регистрация: 12.9.2009

Репутация: нет
Всего: нет



Цитата(boostcoder @  24.5.2011,  23:12 Найти цитируемый пост)
от части.

получается, что вы назвали "тупиковой" дну из основных составляющих  того что так усердно расхваливаете. Не противоречите ли вы сами себе?

+ко всему мной описанная схема будет работать на чистых сокетах гораздо эффективнее(предположение), т.к. в ней нет никаких нагромождений сверху.
PM MAIL   Вверх
asmdzen
Дата 24.5.2011, 23:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



**


Профиль
Группа: Участник
Сообщений: 345
Регистрация: 28.11.2010

Репутация: 3
Всего: 5



придется наверное все-таки писать под бустом, с мфк не канает что-то, поставил Sleep(10000) при Receive и засыпает вся прога - а я думал у них какие-то потоки есть (
PM MAIL   Вверх
bsa
Дата 24.5.2011, 23:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



Цитата(igsilya @ 24.5.2011,  23:23)
Цитата(boostcoder @  24.5.2011,  23:12 Найти цитируемый пост)
от части.

получается, что вы назвали "тупиковой" дну из основных составляющих  того что так усердно расхваливаете. Не противоречите ли вы сами себе?

+ко всему мной описанная схема будет работать на чистых сокетах гораздо эффективнее(предположение), т.к. в ней нет никаких нагромождений сверху.

"Не читал, но осуждаю" ©

Рекомендую серьезно ознакомиться с Asio. Возможно, после этого взгляд на мир будет совсем иной. А для затравки скажу: у меня однопоточный сервер (что-то типа SSL прокси и без пула потоков) может обрабатывать тысячи одновременных подключений (т.е. я проводил стресс тестирование, но обычная нагрузка порядка нескольких десятков-сотни). Причем, сильно нагруженных. Написан с использованием boost::asio.

Добавлено через 1 минуту и 3 секунды
asmdzen, тебе сказали, MFC давно труп. Использование его стоит свести к минимуму.
PM   Вверх
Страницы: (3) Все 1 [2] 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0624 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.