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

Поиск:

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


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


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

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



Цитата(boostcoder @  26.10.2010,  10:33 Найти цитируемый пост)
но это плохая реализация. нелепо как-то, в один интерфейс пихать сотни методов 

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





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


pattern`щик
****


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

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



Цитата(mes @  26.10.2010,  11:38 Найти цитируемый пост)
исполнители должны иметь каждый свою группу сообщений или некоторые сообщения будут для исполнителей общие ?

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

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

Добавлено через 2 минуты и 15 секунд
сейчас приведу структуру классов для понимания..

Добавлено через 12 минут и 20 секунд
Код

template<typename IF>
struct user_context {
   user_context():_impl(new IF) {}
   boost::shared_ptr<IF> _impl;
   // все остальное скрыто.
};

template<typename IF>
struct server {
// по boost::asio::ip::tcp::acceptor::async_accept() создается новый user_context<IF>
};

где IF - тип исполнителя.
PM WWW   Вверх
mes
Дата 26.10.2010, 12:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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

опять на помню, может уговорю пересмотреть контракт с сервером с запрос->ответ, на вызов<->вызов
smile


Цитата(boostcoder @  26.10.2010,  10:51 Найти цитируемый пост)
еще момент. проблема с конструкторами исполнителей. каким образом реализовать поддержку аргументов для конструкторов?

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

Добавлено через 42 секунды
как вариант передавать библиотеке ссылку на фабрику..

Добавлено через 3 минуты и 18 секунд
итак для начал нам нужно ограничить проблему.. 
что мы имеем ?
набор некоторых типов данных с ид
набор исполнителей

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




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


pattern`щик
****


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

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



Цитата(mes @  26.10.2010,  12:11 Найти цитируемый пост)
пересмотреть контракт с сервером с запрос->ответ, на вызов<->вызов

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

Цитата(mes @  26.10.2010,  12:11 Найти цитируемый пост)
как вариант передавать библиотеке ссылку на фабрику.. 

да, вариант.. набросаю пример..
PM WWW   Вверх
mes
Дата 26.10.2010, 12:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(boostcoder @  26.10.2010,  11:18 Найти цитируемый пост)
да, вариант.. набросаю пример.. 

не торопитесь с этим ..

Добавлено через 12 секунд
Цитата(boostcoder @  26.10.2010,  11:18 Найти цитируемый пост)
поясните плиз ;)

сейчас



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


pattern`щик
****


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

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



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

client client(...);
client::result_type<registration_api> reg = client.create<registration_api>(arguments...);

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


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


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

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



Цитата(boostcoder @  26.10.2010,  11:18 Найти цитируемый пост)
не представляю как это должно выглядеть/функционировать..

Ваша схема (если убрать все лишнее) выглядит так :
Код

struct  client;

struct server {
   login_result login (client&) { return .. }
   quit_result  quit (client&)  { return .. }    
};

class client {
   login_result login () { return m_server.login(*this); }
   quit_result quit ()   { return m_server.quit(*this); }  
   
   client(server&s) : m_server(s) {}
   
   server& m_server;
};

главный недостаток в том, что сервер предоставляет информацию ТОЛЬКО по запросу пользователя..
то есть например сообщения чата, будут читаться только когда пользователь запросит, а сервер должен их хранить все это время... 
а не тогда когда кто то написал.. 
 




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


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(mes @  26.10.2010,  12:38 Найти цитируемый пост)
главный недостаток в том, что сервер предоставляет информацию ТОЛЬКО по запросу пользователя
Если посмотреть на классиков (DCOM например), то там для этих случаев используют callback'и. Т.е. по сути локальный сервер на стороне пользователя + локальный пользователь на стороне сервера. 


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


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


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

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



а вот так примерно выглядит схема вызов<->вызов : 
Код


struct server {
   void login (client&) {  };
   void quit (client&) { }
   void chat_msg (client& c, std::string& phrase)
   {
        for each(other in all_clients)
        {
           if (other != c)
             client.on_chat_msg(chat_msg_t(c.name, phrase));
        }
   }
};

class client {
   void login ()    { m_server.login(*this); }
   void quit ()     { m_server.quit(*this); }  
   void chat_msg () { m_server.chat_msg(*this, "hallo"); }
   
   void on_login ()  { std::cout << "login ok "; }
   void on_quit  ()  { std::cout << "bye bye "; }
   void on_chat_msg (chat_msg_t m)
   {
     std::cout <<"from " << m.user_name << ": " << m.phrase;   
   }
      
   client(server&s) : m_server(s) {}
   
   server& m_server;
};


Добавлено @ 12:48
Цитата(xvr @  26.10.2010,  11:42 Найти цитируемый пост)
Если посмотреть на классиков (DCOM например), то там для этих случаев используют callback'и.

не знаю как в там в DCOM, но фактически асинхронные callback`и я и предлагаю.. 
 smile 
только вот НЕ с соотношением один вызов один каллбяк )

Это сообщение отредактировал(а) mes - 26.10.2010, 12:50


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


pattern`щик
****


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

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



что-то не въезжаю.. откуда на стороне клиента может взяться сервер, и на стороне сервера клиент? кто тогда является сервером?
PM WWW   Вверх
mes
Дата 26.10.2010, 12:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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

Добавлено @ 12:52
Цитата(boostcoder @  26.10.2010,  11:50 Найти цитируемый пост)
что-то не въезжаю.. откуда на стороне клиента может взяться сервер, и на стороне сервера клиент? кто тогда является сервером? 

есть локальный сервер и удаленный smile

Добавлено @ 12:52
с клиентом то же самое )

Добавлено @ 12:59
boostcoder, в общем чтоб не путаться
 если информация содержится/накапливается на сервере а клиент ее должен считать, то Ваш способ подходит
если нужна возможность непосредственного взаимодействия клиента с клиентами или ж просто нужна возможность уведомления от сервера в независимости от запроса клиента то не подойдет. 


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


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


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

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



Цитата(mes @  26.10.2010,  12:46 Найти цитируемый пост)
не знаю как в там в DCOM,
Один в один с твоим предложением  smile 

Цитата(boostcoder @  26.10.2010,  12:50 Найти цитируемый пост)
кто тогда является сервером? 
Оба. Равно как и клиентом, тоже оба.


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


pattern`щик
****


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

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



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

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

Цитата(xvr @  26.10.2010,  13:00 Найти цитируемый пост)
Оба. Равно как и клиентом, тоже оба.

т.е. чтоб скомпилить клиентскую сторону, должна быть доступна реализация сервера, и на оборот? я правильно понял?
PM WWW   Вверх
mes
Дата 26.10.2010, 13:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



Цитата(xvr @  26.10.2010,  12:00 Найти цитируемый пост)
Оба. Равно как и клиентом, тоже оба.

вот например фирма выполняет заказ.. она в этот момент сервер, а заказчик клиент, 
а когда фирма высылает ему счет для оплаты, то заказчик сервер, а фирма клиент smile
т.е. все зависит от темы рассмотрения.. 
smile

Добавлено @ 13:11
Цитата(boostcoder @  26.10.2010,  12:06 Найти цитируемый пост)
т.е. чтоб скомпилить клиентскую сторону, должна быть доступна реализация сервера, и на оборот? я правильно понял? 

не совсем так.. клиентский клиент и клиентский сервер, несколько (а может и совершенно) другие чем серверный сервер и серверный клиент smile
smile

Добавлено @ 13:11
все зависит от исполнения.. smile

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


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


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


pattern`щик
****


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

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



т.е. мне нужно сейчас разделить реализацию сервера и клиента на две части.
сервер:
1. класс с аксэптором слушающим порт(КАСП).
2. класс взаимодействующий с сокетом клиента(КВСК).

клиент:
1. класс взаимодействующий с сокетом сервера(КВСС).
2. сериализатор/десериализатор команд(СДК).

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

запутался..

Добавлено через 55 секунд
в таком случае, нужно два соединения? одно клиента-с-сервером, второе сервера-с-клиентом? так?
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.1514 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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