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

Поиск:

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


Новичок



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

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



Цитата(bsa @  24.5.2011,  23:35 Найти цитируемый пост)
 однопоточный 



на сколько я понял получается он "однопоточным" только для внешнего пользователя библиотеки, а на самом деле это все происходит через кучу потоков(или чего-то еще), реализующих асинхронику на более низком уровне.
PM MAIL   Вверх
boostcoder
Дата 24.5.2011, 23:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



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

читайте с начала.

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

голословное утверждение.

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

я в одном из проектов, при ~3800 клиентов онлайн, получил в пике ~220000 запросов/ответов в секунду. это с учетом логики повешенной на запросы/ответы. если ее исключить, повысится больше чем вдвое.

Добавлено через 1 минуту и 12 секунд
Цитата(igsilya @  24.5.2011,  23:43 Найти цитируемый пост)
на сколько я понял получается он "однопоточным" только для внешнего пользователя библиотеки, а на самом деле это все происходит через кучу потоков(или чего-то еще), реализующих асинхронику на более низком уровне

в третий раз вы все неправильно поняли.

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


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


Эксперт
****


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

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



Цитата(bsa @  24.5.2011,  23:35 Найти цитируемый пост)
у меня однопоточный сервер

Цитата(bsa @  24.5.2011,  23:35 Найти цитируемый пост)
может обрабатывать тысячи одновременных подключений

Вот тут непонятно.
Если в программе один поток, то подключения обрабатываются последовательно. Нет ?
Если же распараллеливание берёт на себя asio, то сервер, всё-таки, не однопоточный.
Или же, если под "обработкой" считать то, что запрос принят, и обработка (подготовка ответа и выдача его клиенту) поставлена в очередь, то, наверное, можно сказать, что подключения обрабатываюся одновременно.
Растолкуйте, где я не прав, пожалуйста.


--------------------
Женщины отличаются от программистов тем, что у них чары состоят из стрингов
PM MAIL Jabber   Вверх
boostcoder
Дата 25.5.2011, 00:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(borisbn @  25.5.2011,  00:23 Найти цитируемый пост)
Если в программе один поток, то подключения обрабатываются последовательно. Нет ?

я так понял, что речь о приеме подключений. если да - то принятие подключения(accept) выполняется поочередно.

Цитата(borisbn @  25.5.2011,  00:23 Найти цитируемый пост)
Если же распараллеливание берёт на себя asio, то сервер, всё-таки, не однопоточный.

не понятно, откуда взято мнение о том, что asio создает какие-то потоки?! никаких потоков для эмитации асинхронности asio не создает!
единственное исключение это:
Цитата

n additional thread per io_service is used to emulate asynchronous host resolution. This thread is created on the first call to either ip::tcp::resolver::async_resolve() or ip::udp::resolver::async_resolve().

http://www.boost.org/doc/libs/1_46_1/doc/h...ementation.html
Цитата(borisbn @  25.5.2011,  00:23 Найти цитируемый пост)
Или же, если под "обработкой" считать то, что запрос принят, и обработка (подготовка ответа и выдача его клиенту) поставлена в очередь, то, наверное, можно сказать, что подключения обрабатываюся одновременно.

принятие запроса на подключение - асинхронная операция. поэтому да, принятие подключений происходит асинхронно по отношению к остальным операциям с сокетами.

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



**


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

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



только утром до меня дошло, все базируется на winsocket'ах (если писать под винду), МФК работает примерно так:
есть цикл обработки сообщений от винды, при создании нового сокета - его данные помещяются в определенный список получателей сообщений, сокет работает асинхронно в том смысле что при поступлении данных он получает их все и уже после посылает своему объекту сообщение о принятии (OnReceive обработчик), получается что если у меня больше одного CSocket'а операции с ними будут происходить по очереди (одно сообщение за раз), но зато при Receive никаких лагов не будет - сокет уже получил данные и просит чтоб объект их обработал. (из-за цикла обработчика сообщений при моем Sleep'е замирала вся прога - сообщения для окна обрабатываются в том-же цикле smile)

boostcoder, можете коротко описать процес создания сервера на бусте? например какой класс за что отвечает, какой между объектами происходит обмен данными?
PM MAIL   Вверх
boostcoder
Дата 25.5.2011, 08:28 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(asmdzen @  25.5.2011,  08:20 Найти цитируемый пост)
процес создания сервера на бусте

какого именно сервера?

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



**


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

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



простой сервер который принимает соединения от клиентов и может принимать потом от них данные,
типа conListener который ждет новых соединений, при их поступлений создается новый сокет который и получит это соединение - он способен получить какие-то данные, обработать их и отослать ответ клиенту.
еще загвоздка получилась, если сервер(отдельный сокет) получил от клиента запрос который потребует время для выполнения (напр. создание нового соединение, получения данных от другого клиента), как это реализовать?
PM MAIL   Вверх
boostcoder
Дата 25.5.2011, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(asmdzen @  25.5.2011,  08:39 Найти цитируемый пост)
простой сервер который принимает соединения от клиентов и может принимать потом от них данные

смотри пример чата: http://www.boost.org/doc/libs/1_46_1/doc/h...o.examples.chat

Добавлено через 2 минуты и 27 секунд
Цитата(asmdzen @  25.5.2011,  08:39 Найти цитируемый пост)
еще загвоздка получилась, если сервер(отдельный сокет) получил от клиента запрос который потребует время для выполнения (напр. создание нового соединение, получения данных от другого клиента), как это реализовать?

ожидание данных от клиента не блокирует очередь задач io_service`а. никакой проблемы нет.

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



**


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

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



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


pattern`щик
****


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

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



Цитата(asmdzen @  25.5.2011,  09:16 Найти цитируемый пост)
io_service который обрабатывает все, для него создается отдельный поток

отдельный поток создавать не обязательно. весь сервер может работать всего в одном потоке. это если не требуется повышенная производительность.

Цитата(asmdzen @  25.5.2011,  09:16 Найти цитируемый пост)
в этом потоке обрабатываются все запросы сделанные при помощи post

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

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



**


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

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



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

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

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

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

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


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

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


 




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


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

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