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

Поиск:

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


pattern`щик
****


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

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



Цитата(baldina @  31.3.2011,  01:56 Найти цитируемый пост)
подумать об этом когда будет работающая модель простого типа

это какого?

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


pattern`щик
****


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

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



еще один момент:
в случае mail сервиса, Вы, как реализатор, нуждаетесь в использовании функции send этого узла. в случае когда узел запущен локально на вашей машине, Вы заботитесь о том, как вызвать эту функцию. а, к примеру, узел запущен на удаленной машине, и его функция send "торчит" из его интерфейса. в таком случае, другие узлы этого же типа, сами могут вызывать его функцию(фишка). но встает вопрос о том, как Вам "подключиться" к вашему узлу? идеи?

Добавлено @ 02:18
так же, нужно предусмотреть защиту от рекурсивного вызова узлом своей же функции через другие узлы. а такая ситуация возможна.


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


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


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

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



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

тогда условный код будет таким :
Код

struct imsg {};
struct math
{
   struct iargs { };
   struct icmd : imsg
   {
      std::string name;
      iargs * args;
   };
   struct ires : imsg
   {
      iargs * args;
   };
};

struct math_svc
{
   math::ires operator(math::icmd  const&)
   {
       return math::ires();
   }
};


struct main_svc
{
    imsg user (imsg const&);
    imsg quit (imsg const&);
    imsg math (imsg const& msg)
    {
       return _math (msg);
    }
    math_svc _math;
};

тогда "мигрант" будет вида service cmd args
что для нашего случая есть :  math add 2 2

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


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


pattern`щик
****


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

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



Цитата(mes @  31.3.2011,  02:18 Найти цитируемый пост)
центральный сервис сервера

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


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


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

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



Цитата(boostcoder @  31.3.2011,  01:20 Найти цитируемый пост)
это что? сервис сервисов? 

тот с которого мы начнем общение.. 
ага можно сказать сервис сервисов.. 


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


pattern`щик
****


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

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



Цитата(mes @  31.3.2011,  02:18 Найти цитируемый пост)
тогда "мигрант" будет вида service cmd args
что для нашего случая есть :  math add 2 2

поясните, что есть что?

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

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


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


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

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



Цитата(boostcoder @  31.3.2011,  01:23 Найти цитируемый пост)
Цитата

тогда "мигрант" будет вида service cmd args
что для нашего случая есть :  math add 2 2


поясните, что есть что?

migrant это наше сообщение серверу.. 
math команда сервера реализуемая сервисом

с точки зрения сервера : add 2 2 - аргументы для команды math 

с точки зрения math : add - имя команды,  2 2 - аргументы..

с точки зрения клиента connection.math.add(2,2)

Цитата(boostcoder @  31.3.2011,  01:23 Найти цитируемый пост)
из каких соображений это родилось? 

с того, что где то должна быть точка входа smile


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


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


pattern`щик
****


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

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




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


Добавлено @ 02:47
Цитата(mes @  31.3.2011,  02:34 Найти цитируемый пост)
с того, что где то должна быть точка входа

ааа, вот Вы о чем.
ну может тогда уж назвать его coordinator? какое-то более приближенное к его задаче название.


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


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


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

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



Цитата(boostcoder @  31.3.2011,  01:45 Найти цитируемый пост)
ун может тогда уж назвать его coordinator? какое-то более приближенное к его задаче название.

так с точки зрения вышепоказанного примера main_svc и math_svc имеют одинаковое кол-во координирования smile

Добавлено через 1 минуту и 9 секунд
Цитата(boostcoder @  31.3.2011,  01:45 Найти цитируемый пост)
эм... тему по обсуждению теоретических деталей, создавать будем? ;)

ну попробуйте..smile 


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


pattern`щик
****


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

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



Цитата(mes @  31.3.2011,  02:55 Найти цитируемый пост)
с точки зрения вышепоказанного примера main_svc и math_svc имеют одинаковое кол-во координирования

опять новые термины :(

Цитата(mes @  31.3.2011,  02:55 Найти цитируемый пост)
ну попробуйте

с утра.
я спать.
спокойной Вам.

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


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


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

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



Цитата(boostcoder @  31.3.2011,  01:59 Найти цитируемый пост)
спокойной Вам.

взаимно



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


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


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

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



Цитата(mes @  31.3.2011,  01:18 Найти цитируемый пост)
тогда условный код будет таким :

подправил :

http://liveworkspace.org/code/cb5ba0d7e218...9f3363caf33fe07
Код


typedef std::string svc_name;

struct migrant {
   svc_name svc;
};

struct iservice {
  virtual void dispatch (migrant const& msg) {} // =0;
};

struct main_svc
{
    void signin (svc_name const& name, iservice *svc ) 
    { 
       _services.insert ( std::make_pair ( name,svc ) ); 
    }
    void dispatch (migrant const& msg)
    {
       auto r = _services.equal_range(msg.svc);
            
       for (auto it = r.first; it != r.second; ++it)
          it->second->dispatch (msg);
    }
      
    std::multimap<svc_name, iservice*>  _services;
    
};

struct math_simple : iservice
{
   void add ();
   void sub ();
   void mul ();
   void div ();
};

struct math_trigo : iservice
{
   void sin ();
   void cos ();
   void tan ();
};


int main ()
{
      main_svc _main_svc;
      
     _main_svc.signin ("math", new math_simple);
     _main_svc.signin ("math", new math_trigo);

     _main_svc.dispatch ( migrant( /*math add,2,2*/ ) ); // math_simple
     _main_svc.dispatch ( migrant( /*sin  90,2,2*/ ) );  // math_trigo
}




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


Новичок



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

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



По мне - всё это напоминает кластерную систему, только распределяются не множества ресурсов на одну задачу, а разбивается запрос на много задач, которые распределяются на кластеры выполнения.
PM MAIL ICQ   Вверх
mes
Дата 31.3.2011, 10:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



еще набросок, чтоб видно было ход мысли :
Код

namespace math {

typedef std::string  value_t;

struct simple_ops_svc
{
   void add(value_t a, value_t b) {}
   void sub(value_t a, value_t b) {}
      
};

struct trigo_ops_svc
{
   void sin (value_t a) {}
   void cos (value_t b) {}
};
struct main_svc : simple_opc_svc, trigo_ops_svc
{  
};

} // namespace math

 не путать math::main_svc и ::main_svc

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

math::main_svc _math;
_math.add(a,b);


явно видно, что при стандартном подходе получается неуклюжая конструкция.. 



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


Эксперт
****


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

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



Цитата(boostcoder @  31.3.2011,  01:59 Найти цитируемый пост)
Цитата(baldina @  31.3.2011,  01:56 )
подумать об этом когда будет работающая модель простого типа

это какого?

обычный клиент-сервер

Это сообщение отредактировал(а) baldina - 31.3.2011, 11:09
PM MAIL   Вверх
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С++:Общие вопросы"
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.1324 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


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

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