![]() |
|
Модераторы: bsa |
![]()
|
|
| igsilya |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 23 Регистрация: 12.9.2009 Репутация: нет Всего: нет |
||||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
читайте с начала.
голословное утверждение. я в одном из проектов, при ~3800 клиентов онлайн, получил в пике ~220000 запросов/ответов в секунду. это с учетом логики повешенной на запросы/ответы. если ее исключить, повысится больше чем вдвое. Добавлено через 1 минуту и 12 секунд в третий раз вы все неправильно поняли. |
||||
|
|||||
| borisbn |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 4875 Регистрация: 6.2.2010 Где: Ростов-на-Дону Репутация: 21 Всего: 135 |
Вот тут непонятно. Если в программе один поток, то подключения обрабатываются последовательно. Нет ? Если же распараллеливание берёт на себя asio, то сервер, всё-таки, не однопоточный. Или же, если под "обработкой" считать то, что запрос принят, и обработка (подготовка ответа и выдача его клиенту) поставлена в очередь, то, наверное, можно сказать, что подключения обрабатываюся одновременно. Растолкуйте, где я не прав, пожалуйста. -------------------- Женщины отличаются от программистов тем, что у них чары состоят из стрингов |
|||
|
||||
| boostcoder |
|
||||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
я так понял, что речь о приеме подключений. если да - то принятие подключения(accept) выполняется поочередно.
не понятно, откуда взято мнение о том, что asio создает какие-то потоки?! никаких потоков для эмитации асинхронности asio не создает! единственное исключение это:
http://www.boost.org/doc/libs/1_46_1/doc/h...ementation.html принятие запроса на подключение - асинхронная операция. поэтому да, принятие подключений происходит асинхронно по отношению к остальным операциям с сокетами. |
||||||
|
|||||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
только утром до меня дошло, все базируется на winsocket'ах (если писать под винду), МФК работает примерно так:
есть цикл обработки сообщений от винды, при создании нового сокета - его данные помещяются в определенный список получателей сообщений, сокет работает асинхронно в том смысле что при поступлении данных он получает их все и уже после посылает своему объекту сообщение о принятии (OnReceive обработчик), получается что если у меня больше одного CSocket'а операции с ними будут происходить по очереди (одно сообщение за раз), но зато при Receive никаких лагов не будет - сокет уже получил данные и просит чтоб объект их обработал. (из-за цикла обработчика сообщений при моем Sleep'е замирала вся прога - сообщения для окна обрабатываются в том-же цикле boostcoder, можете коротко описать процес создания сервера на бусте? например какой класс за что отвечает, какой между объектами происходит обмен данными? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
||||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
простой сервер который принимает соединения от клиентов и может принимать потом от них данные,
типа conListener который ждет новых соединений, при их поступлений создается новый сокет который и получит это соединение - он способен получить какие-то данные, обработать их и отослать ответ клиенту. еще загвоздка получилась, если сервер(отдельный сокет) получил от клиента запрос который потребует время для выполнения (напр. создание нового соединение, получения данных от другого клиента), как это реализовать? |
|||
|
||||
| boostcoder |
|
|||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
смотри пример чата: http://www.boost.org/doc/libs/1_46_1/doc/h...o.examples.chat Добавлено через 2 минуты и 27 секунд ожидание данных от клиента не блокирует очередь задач io_service`а. никакой проблемы нет. |
|||
|
||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
boostcoder, в общем я восхищен ) даже не знаю почему раньше этим не пользовался )
приходилось все писать вручную теперь почти все понятно (не исключены вопросы в будущем), попробую написать на бусте. так понимаю создается io_service который обрабатывает все, для него создается отдельный поток, в этом потоке обрабатываются все запросы сделанные при помощи post. |
|||
|
||||
| boostcoder |
|
||||
![]() pattern`щик ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5458 Регистрация: 1.4.2010 Репутация: 20 Всего: 110 |
отдельный поток создавать не обязательно. весь сервер может работать всего в одном потоке. это если не требуется повышенная производительность.
post - это явный способ положить в очередь задач свою задачу. а в недрах, все асинхронные операции неявно создают объект задачи и добавляют его в очередь. вот только не уверен что именно при помощи post метода. |
||||
|
|||||
| asmdzen |
|
|||
![]() ![]() ![]() Профиль Группа: Участник Сообщений: 345 Регистрация: 28.11.2010 Репутация: 3 Всего: 5 |
в общем все понятно, сейчас применил мфк, для себя буду писать только под буст )
|
|||
|
||||
![]()
|
| Правила форума "C/C++: Для новичков" | |
|
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Для новичков | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |