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

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> удаленный вызов. детали, реализация, архитектура, у темы новое название! 
:(
    Опции темы
boostcoder
Дата 2.12.2010, 02:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


pattern`щик
****


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

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



Цитата(mes @  2.12.2010,  02:28 Найти цитируемый пост)
не если нажатие каждой кнопки будет локальным или отсылаться в сеть, то проблем то же не вижу..или если все будет в одном окне..
а вот при мултиоконной системе, и с возможностью собстевенного состояния гуи, начинаются проблемы.. (на мой взгляд)

Вы о регистрации реализаций говорите?(наверное реализации Вы и называете агентами, так?)
PM WWW   Вверх
mes
Дата 2.12.2010, 02:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  2.12.2010,  01:31 Найти цитируемый пост)
для начала скажите, что подразумевается под словом "агент" ?

ну например рассмотреть техподдержку какой нибудь фирмы.. у них на "одном" телефоне сидит куча разных специалистов, _каждый_ по своей области.. каждый является агентом услуги.. т.е один сервис разбит на несколько разделов, каждый из которых представлен агентом..
точно также и для клиента.. есть шеф и у него есть много агентов, _каждый_ по своей специализации..

_каждый_ выделен, так как может быть несколько одинаков специалистов на одну задачу..

Добавлено через 2 минуты и 9 секунд
если применительно к вашей задаче, то есть 
агент авторизации, агент чата, агент приглашений,, агент игры и т.д.. 
все вместе представляют клиента (для серверной стороны может быть аналогично) ..

Добавлено через 4 минуты и 42 секунды
Цитата(mes @  2.12.2010,  01:39 Найти цитируемый пост)
(для серверной стороны может быть аналогично) ..  

это если сервер все в одном флаконе.. а так он может осуществлять только распределение и на каждое "действие" будет свой сервис..
тогда агент в принципе "равен" сервису..

Добавлено через 5 минут и 42 секунды
грубо говоря логически законченная "единица связи" 


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


pattern`щик
****


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

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



вот малюсенький пример:
для регистрации, нам нужно определить следующее: 1)свободен ли ник, 2)свободна ли почта, 3)если введен бонус-код - определить, валиден ли он.

из этого имеем:
Код

// с этим типом работает discoly
// т.к. мы находимся на стороне клиента, мы используем интерфейсы для реализации этого класса
struct registration_api {
   bool nick_is_free(const std::string&);
   bool email_is_free(const std::string&);
   bool bonuscode_is_valide(const std::string&);

   bool registration(const registration_info&);
};

struct registration_window {
   registration_window(parent*, discoly::net_client* client):client(client) {
      _reg = client.get<discoly::ifaces::registration_api_ptr>();
   }

   void on_nick_entered(const std::string& nick) {
       if ( ! _reg->nick_is_free(nick) ) {
          error
       }
   }

   void on_email_entered(const std::string& email) {
      if ( !_reg->email_is_free(email) ) {
         error
      }
   }

   discoly::ifaces::registration_api_ptr _reg;
};

struct main_window {
   main_window(discoly::net_client* client) {}
   void on_registration_btn_clicked() {
       _reg_wnd = shared_ptr<registration_window>(new registration_window(this, client));
   }
   shared_ptr<registration_window> _reg_wnd;
};

int main() {
   discoly::net_client client(...);
   main_window* w = new main_window(&client);
   return w->run();
}


собственно я все это дело вижу так..
PM WWW   Вверх
mes
Дата 2.12.2010, 02:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



вот набросал вид :
Код

struct client
{
    discoly::tcp_connection _conn;
    discoly::distributor _distr;
   
    auth_agent  _auth;
    talk_agent  _talk;
    game_agent  _game; 

    client () : _auth(_conn), _talk(_conn), _game(_conn)
    {
        _distr += _auth += _talk += _game;
        _conn.set_responder(_distr);        
    }
}:


Добавлено @ 02:56
Цитата(boostcoder @  2.12.2010,  01:52 Найти цитируемый пост)
truct registration_window 

т.е соотношение 1:1 на одно апи свое окно.. а если захочется в одном окне показывать сведения получаемые из разных апи ?
или часть апи в одном окне, а часть в другом ?

Добавлено через 4 минуты и 16 секунд
к тому же там только получение, а где отправка ?

Добавлено через 6 минут и 46 секунд
к тому же у вас в схеме прямая завязка на сеть.. т.е что видим , то и пишем и никакой обработки .. 


Это сообщение отредактировал(а) mes - 2.12.2010, 02:57


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


pattern`щик
****


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

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



Цитата(mes @  2.12.2010,  02:39 Найти цитируемый пост)
на "одном" телефоне сидит куча разных специалистов, _каждый_ по своей области.. каждый является агентом услуги.. т.е один сервис разбит на несколько разделов, каждый из которых представлен агентом..
точно также и для клиента.. есть шеф и у него есть много агентов

я это вижу как класс с методами.
кстати в моей начальной версии discoly так все и реализовано. есть class_id и есть method_id.

Добавлено @ 03:06
Цитата(mes @  2.12.2010,  02:54 Найти цитируемый пост)
т.е соотношение 1:1 на одно апи свое окно.. а если захочется в одном окне показывать сведения получаемые из разных апи ?
или часть апи в одном окне, а часть в другом ?

Добавлено через 4 минуты и 16 секунд
к тому же там только получение, а где отправка ?

нет-нет. это код клиентской части. методы on_nick_entered() и on_email_entered() вызываются из гуя. посылка самих команд на сервер происходит посредством интерфейса к классу registration_api _reg.
тут я привел класс registration_api только чтоб было видно его методы. на самом деле его реализация живет на сервере.

Добавлено через 7 минут и 28 секунд
Цитата(mes @  2.12.2010,  02:54 Найти цитируемый пост)
а если захочется в одном окне показывать сведения получаемые из разных апи ?

так:
Код

client.get<discoly::ifaces::registration_api_ptr>()->method(...);
client.get<discoly::ifaces::statistic_api>()->method(...);
client.get<discoly::ifaces::top_user>()->method(...);



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


любитель
****


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

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



Цитата(boostcoder @  2.12.2010,  02:02 Найти цитируемый пост)
нет-нет. это код клиентской части. методы on_nick_entered() и on_email_entered() вызываются из гуя. посылка самих команд на сервер происходит посредством интерфейса к классу registration_api _reg.

я не имел ввиду непосредственно посылку.. любой диалог состоит из двух частей зачастую не симетричных, высказывание и выслушивание..
ну высказывание у вас есть, а как с получением ? (я в верху отправку с получением перепутал smile)

Добавлено @ 03:11
а увидел, Вы опять привели все к синхроному виду.. (ночь видать сказывается, не сразу въехал)

Добавлено @ 03:14
т.е. пока ответ на одно сообщение не придет, весь гуй будет ждать.. (ну перерисовку допустим разгрузите),
а вот логику уже без костылей не получится разгрузить.. 
т.е если вы нажали на одну кнопку, на вторую жать бесмыслено пока первая не закончит работу..


Это сообщение отредактировал(а) mes - 2.12.2010, 03:15


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


pattern`щик
****


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

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



Цитата(mes @  2.12.2010,  03:10 Найти цитируемый пост)
а увидел, Вы опять привели все к синхроному виду..

не в этом даже дело. в данном примере удобно использовать синхронные вызовы.
другое дело обновление статистики в гуе, оно точно асинхронное...как и множество другого взаимодействия..
PM WWW   Вверх
mes
Дата 2.12.2010, 03:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  2.12.2010,  02:16 Найти цитируемый пост)
не в этом даже дело. в данном примере удобно использовать синхронные вызовы.

поверьте, для гуя не удобно.. 


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


pattern`щик
****


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

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



Цитата(mes @  2.12.2010,  03:10 Найти цитируемый пост)
т.е. пока ответ на одно сообщение не придет, весь гуй будет ждать.. (ну перерисовку допустим разгрузите),
а вот логику уже без костылей не получится разгрузить.. 
т.е если вы нажали на одну кнопку, на вторую жать бесмыслено пока первая не закончит работу..

Вы очень категорично на это реагируете.
я проводил тесты.
к примеру, в 1мбитном канале в мир(разгруженном), время отклика составляет 17-22мс. Вы даже не заметите тормоза.
в этом же канале, при закачке торрента, когда канал нагружен на 100%, время отклика составляет 82-112мс. а это, Вы считаете много?

Добавлено через 3 минуты и 33 секунды
я считаю, что тормоза в 200мс можно вообще не рассматривать как тормоза. если это конечно не реалтаймовская стрелялка smile 
PM WWW   Вверх
mes
Дата 2.12.2010, 03:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  2.12.2010,  02:19 Найти цитируемый пост)
к примеру, в 1мбитном канале в мир(разгруженном), время отклика составляет 17-22мс. Вы даже не заметите тормоза.

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



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


pattern`щик
****


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

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



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

Добавлено через 1 минуту и 27 секунд
Цитата(mes @  2.12.2010,  03:25 Найти цитируемый пост)
и в частности если в момент замирания при синхронном вызове придет другое сообщение, что с ним делать ?!

т.к. у нас сетевая часть асинхронная, это сообщение повиснет на диспетчере до тех пор, пока предыдущее не вернет управление.

Добавлено через 3 минуты и 12 секунд
mes, повторюсь: это не проблема/недостаток discoly. это возможность. если пользователь хочет использовать синхронные вызовы - пусть использует. это его личное дело, ровно как и последствия его.
PM WWW   Вверх
mes
Дата 2.12.2010, 03:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



Цитата(boostcoder @  2.12.2010,  02:28 Найти цитируемый пост)
.к. у нас сетевая часть асинхронная, это сообщение повиснет на диспетчере до тех пор, пока предыдущее не вернет управление. 

послали msg1 wdem re_msg1.. но пришли re_msg2 и за ним re_msg3 ..
что с ними делать ? пока мы их не заберем из асио, мы не узнаем о re_msg1..a если заберем , то кому отдавать ? можно конечно заpostить в оконный цикл, но.. а вдруг от re_msg3 зависит обработка re_msg1..  ну к примеру re_msg3 это quit, ban или просто дисконнект..

Добавлено через 1 минуту и 36 секунд
Цитата(boostcoder @  2.12.2010,  02:28 Найти цитируемый пост)
о возможность. если пользователь хочет использовать синхронные вызовы - пусть использует. это его личное дело, ровно как и последствия его. 

ну если эта не нужная нам подробность, то зачем такой пример приводили ? smile  smile

Добавлено через 7 минут и 36 секунд
Цитата(boostcoder @  2.12.2010,  02:28 Найти цитируемый пост)
user_context будет очень "тяжелым" объектом.

смотря как вы его представляете.. возможны различные реализации.. 



Это сообщение отредактировал(а) mes - 2.12.2010, 03:38


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


pattern`щик
****


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

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



Цитата(mes @  2.12.2010,  03:37 Найти цитируемый пост)
послали msg1 wdem re_msg1.. но пришли re_msg2 и за ним re_msg3 ..
что с ними делать ? пока мы их не заберем из асио, мы не узнаем о re_msg1..a если заберем , то кому отдавать ? можно конечно заpostить в оконный цикл, но.. а вдруг от re_msg3 зависит обработка re_msg1..  ну к примеру re_msg3 это quit, ban или просто дисконнект..

я понимаю о чем Вы. но это не относится к discoly. это полностью ответственность/обязанность пользователя спроектировавшего свою логику.

Цитата(mes @  2.12.2010,  03:37 Найти цитируемый пост)
ну если эта не нужная нам подробность, то зачем такой пример приводили ?

привел реальный пример. у меня в форме регистрации эти три метода используют синхронные вызовы. сам же метод registration(...) вызывается асинхронно. и сервер в свою очередь вызывает метод клиента при помощи которого сообщает о результате регистрации.
PM WWW   Вверх
mes
Дата 2.12.2010, 03:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


любитель
****


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

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



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

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

Добавлено через 1 минуту и 48 секунд
Цитата(boostcoder @  2.12.2010,  02:46 Найти цитируемый пост)
 но это не относится к discoly

как не относится если в вашем случае это инструмент дисколи ?... при том низкого уровня..



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


pattern`щик
****


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

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



Цитата(mes @  2.12.2010,  03:37 Найти цитируемый пост)
смотря как вы его представляете..

вот так, влоб: владеет он: 1)registration_api, 2)authorization_api, 3)user_statistic_api, 4)top_statistic_api, 5)news_api, 6)games_list_api, 7)tournament_list_api 8)database_connection.
и все эти объекты создаются при коннекте юзера. вне завсимости от того, когда он будет вызывать их методы(если вообще будет).

можно конечно создавать объекты прям в вызываемых методах.. но это как-то не правильно..
PM WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

Добро пожаловать!

  • Черновик стандарта C++ (за октябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика(4.4мб).
  • Черновик стандарта C (за сентябрь 2005) можно скачать с этого сайта. Прямая ссылка на файл черновика (3.4мб).
  • Прежде чем задать вопрос, прочтите это и/или это!
  • Здесь хранится весь мировой запас ссылок на документы, связанные с C++ :)
  • Не брезгуйте пользоваться тегами [code=cpp][/code].
  • Пожалуйста, не просите написать за вас программы в этом разделе - для этого существует "Центр Помощи".
  • C++ FAQ

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

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


 




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


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

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