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

Поиск:

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


pattern`щик
****


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

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



Цитата(mes @  24.2.2011,  00:38 Найти цитируемый пост)
прежде всего надо понять идеологию, которую Вы хотите записать... дальше все будет проще..


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

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


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


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

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



из того что я понял, то у Вас одноуровневая иерархия функций:
т.е имеется набор изолированных спейсов с функциями, именуемый вами api..
тогда каждая функция имеет условное имя : space.function 
пока так ?

Добавлено @ 00:51
Цитата(boostcoder @  23.2.2011,  23:47 Найти цитируемый пост)
посмотрите мой последний пост. не считая этого поста. 

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



Это сообщение отредактировал(а) mes - 24.2.2011, 00:52


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


pattern`щик
****


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

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



Цитата(mes @  24.2.2011,  00:38 Найти цитируемый пост)
может оставить все таки создание на откуп пользователя ?
кому как не ему лучше знать что делать..

так я об этом и говорю.

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

как должна выглядеть реализация? как создаваться? как регистрироваться? и что должно быть навязано?
все! это весь вопрос!
PM WWW   Вверх
mes
Дата 24.2.2011, 00:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



вариант 1.1 :
Код

struct server : dy::server<server>
{      
    void  on_socket_accept (dy::channel channel) {
       new user_context(channel, _session)
    }
 private:
    shared_ptr<session_context> _session;
};

где, dy::channel (dy::connection) wrapper над сокетом, разрещающий подписку на получение ди_мигрантов.. 



Это сообщение отредактировал(а) mes - 24.2.2011, 00:59


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


pattern`щик
****


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

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



Цитата(mes @  24.2.2011,  00:49 Найти цитируемый пост)
т.е имеется набор изолированных спейсов с функциями, именуемый вами api..
тогда каждая функция имеет условное имя : space.function 
пока так ?

да.

Цитата(mes @  24.2.2011,  00:49 Найти цитируемый пост)
получение, отправку и маршрут я там не вижу, а следовательно представить во взаимодействии не могу..

при подключении создается user_context.
Код

struct user_context {
   void on_inkom(const net_packet& packet) {
      ...
      distr.dispatch(packet);
   }
private:
   distributor distr;
};

это диспетчеризация.
ссылка на distr и должна передаваться в реализацию пользователя.

т.е. как-то так:

Код

template<typename Impl>
struct user_context {
   user_context()
      :_distr(),
      _impl(new Impl(_distr))
   {}

   void on_inkom(const net_packet& packet) {
      ...
      _distr.dispatch(packet);
   }
private:
   distributor _distr;
   boost::shared_ptr<Impl> _impl;
};

пока все понятно?

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


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


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

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



Цитата(boostcoder @  23.2.2011,  23:58 Найти цитируемый пост)
это диспетчеризация.

нахождение диспетчера напрямую в user_context`e вызывает сомнения.. 



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


pattern`щик
****


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

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



Цитата(mes @  24.2.2011,  01:01 Найти цитируемый пост)
нахождение диспетчера напрямую в user_context`e вызывает сомнения.. 

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

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


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


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

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



Цитата(boostcoder @  24.2.2011,  00:03 Найти цитируемый пост)
на прошлой странице я говорил о том, что логичнее было бы использовать один дистрибьютор для всех контекстов, т.к. все они предоставляют одни API. но сейчас не об этом.

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


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


pattern`щик
****


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

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



Цитата(mes @  24.2.2011,  01:06 Найти цитируемый пост)
вот сокет кто хранит ? user_context ?

да.

Цитата(mes @  24.2.2011,  01:06 Найти цитируемый пост)
 передает дистрибьютеру ?

нет. дистрибьютор нужен только для входящих запросов. из user_context`а запросы клиенту отправляются иначе. этот момент я пока тоже упустил.

Цитата(mes @  24.2.2011,  01:06 Найти цитируемый пост)
а у клиента, то же самое, но в других терминах ?

да. клиент не создает контексты...

Добавлено @ 01:23
Цитата(mes @  24.2.2011,  01:06 Найти цитируемый пост)
почему ? 

представьте ситуацию:
главное окно программы. в нем банер который отрисовывается без необходимости логина.
так же, есть окно регистрации и логина.
значит Вы запустили программу, и банер можно отрисовать сразу. для этого, при подключении к серверу, при создании user_context`а, Вам необходимо сразу зарегистрировать API которое клиентская программа дернет, и получит банер.
далее, кликаете по регистрации. вводите логин. сервер сообщает что такой логин уже есть. что нужно для того, чтоб сервер Вам сообщил что логин занят? - Вы должны при отрисовке этого окошка, перед тем как послать запрос серверу, зарегистрировать локальный обработчик который сервер вызовет, и тот в свою очередь сообщит Вам о том что логин занят.

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

но в сервере такой прием(создание/регистрация всех обработчиков при создании контекста) кажется логичным.

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


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


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

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



Цитата(boostcoder @  24.2.2011,  00:11 Найти цитируемый пост)
да. клиент не создает контексты... 

я соотносил не клиент - сервер, a  клиент - user_context...
на клиентской стороне, создателем клиентов, выступает сам юзер, запускающий программу..
а на серверной стороне, для автоматизации это процесса, выступает сервер.. 




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


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


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

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



Цитата(boostcoder @  24.2.2011,  00:11 Найти цитируемый пост)
представьте ситуацию:
главное окно программы. в нем банер который отрисовывается без необходимости логина.
так же, есть окно регистрации и логина

представил..

Цитата(boostcoder @  24.2.2011,  00:11 Найти цитируемый пост)
значит Вы запустили программу, и банер можно отрисовать сразу. 

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

Цитата(boostcoder @  24.2.2011,  00:11 Найти цитируемый пост)
, Вам необходимо сразу зарегистрировать API которое клиентская программа дернет, и получит банер.

какое отношение это аpi имеет к серверу ?! 

Цитата(boostcoder @  24.2.2011,  00:11 Найти цитируемый пост)
далее, кликаете по регистрации. вводите логин. сервер сообщает что такой логин уже есть. что нужно для того, чтоб сервер Вам сообщил что логин занят? - Вы должны при отрисовке этого окошка, перед тем как послать запрос серверу, зарегистрироватьлокальный обработчик который сервер вызовет, и тот в свою очередь сообщит Вам о том что логин занят.

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

Цитата(boostcoder @  24.2.2011,  00:11 Найти цитируемый пост)
заметили ситуацию? ;) в клиенте не получится регать обработчики при старте программы, т.к. некоторые диалоги, методы которых должен дергать сервер, еще не созданы.

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

Цитата(boostcoder @  24.2.2011,  00:11 Найти цитируемый пост)
. а если программа состоит из десятка диалогов - то их вообще невозможно создать сразу потому что для них еще нет данных.
посему, я и сделал возможность регать локальные обработчики в любой момент времени.

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

Цитата(boostcoder @  24.2.2011,  00:11 Найти цитируемый пост)
но в сервере такой прием(создание/регистрация всех обработчиков при создании контекста) кажется логичным.

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

Добавлено через 2 минуты и 56 секунд
и опять же позволю себе заметить, что вы смешиваете в кучу понятия из разных, хотя и смежных, категорий :
"клиент/серверное взаимодействие" и "удаленный вызов"


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


pattern`щик
****


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

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



Цитата(mes @  24.2.2011,  01:46 Найти цитируемый пост)
какое отношение это аpi имеет к серверу ?! 

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

Цитата(mes @  24.2.2011,  01:46 Найти цитируемый пост)
прежде чем отправить в сокет, нужно создать обработчик ответов..

я имел ввиду то, что класс окна диалога и служит обработчиком.
Код

class Registration: QDialog {
   Registration(distributor& distr) {
      reg = distr.registry(this, "registration");
      reg->on(&Registration::user_exists, "user_exists");
   }

   void user_exists(bool ok) { // сервер может вызвать этот метод
      ui->checkBox->setCheckState(ok);
   }

private:
   registry<Registration>::shared_ptr reg;
};


Цитата(mes @  24.2.2011,  01:46 Найти цитируемый пост)
иновата модель, которую Вы себе представили.. 

очень даже возможно. расскажите свое виденье.


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


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


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

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



Цитата(boostcoder @  24.2.2011,  01:01 Найти цитируемый пост)
расскажите свое виденье.

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

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


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


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


pattern`щик
****


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

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



Цитата(mes @  24.2.2011,  03:07 Найти цитируемый пост)
каждый контроллер включает в себя "входящие" и "исходящие" методы по одной "теме"..

можно пример использования?

Цитата(mes @  24.2.2011,  03:07 Найти цитируемый пост)
при вызове "исходящего" отправляется импульс в канал, и, если нужно, отражается на форме.. 

т.е. когда клиент делает удаленный вызов?

Добавлено через 10 минут и 14 секунд
Цитата(mes @  24.2.2011,  03:07 Найти цитируемый пост)
есть канал, из которых мы можем построить сеть для сложных случаев

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

или я все не правильно понял?
PM WWW   Вверх
mes
Дата 24.2.2011, 10:00 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  24.2.2011,  02:22 Найти цитируемый пост)
клиент не может подключиться к клиенту. это по хорошему. т.к. он не умеет принимать запросы на подключение.

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

Цитата(boostcoder @  24.2.2011,  02:22 Найти цитируемый пост)

Цитата

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

т.е. когда клиент делает удаленный вызов?

 smile 

Это сообщение отредактировал(а) mes - 24.2.2011, 10:06


--------------------
PM MAIL WWW   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
Earnest Daevaorn

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

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

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

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


 




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


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

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