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

Поиск:

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


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


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

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



Цитата

//incom 
rpc_packet(_data));

a id у нас тут же нет ? оно же в хидере... тогда уж,  да и наглядней будет.. rpc_packet(_header, _data))

Добавлено через 1 минуту и 8 секунд
все.. остальное мелкое, что сейчас нет смысла подправлять.. 
smile

Добавлено через 2 минуты и 43 секунды
Цитата(boostcoder @  1.11.2010,  21:13 Найти цитируемый пост)
а по поводу заголовка пакета и зависимости от него размера и формата - можно написать mpl структуру, и на компайлтайм определять ее размер и формировать формат.. 

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

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

Добавлено через 6 минут и 49 секунд
и так что у нас терь на планах ?



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


pattern`щик
****


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

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



Цитата(mes @  1.11.2010,  22:16 Найти цитируемый пост)
другое дело, если мпл структорой задавать и формат и длину, как для сервера так и для клиента..
наверно это и имелось ввиду, а я сначала не так понял

ага.

Цитата(mes @  1.11.2010,  22:16 Найти цитируемый пост)
и так что у нас терь на планах ?

у нас проблема с сервером.
код: http://liveworkspace.org/code/dda59b3f3ab3...ce824a4aa58ec89
это стандартная модель сервера основанная на enable_shared_from_this.
а проблем у нас две:
1. класс usercontext наследуется от этого шаблона. он живет в смарт поинтере. и живет он только благодаря тому, что счетчик ссылок постоянно больше нуля. это происходит потому что каждая асинхронная операция, создает хэндлер не на this, а используя метод предка shared_from_this(). этот метод инкрементирует счетчик ссылок, только по этому объект не убивается. сейчас нам нужно решить, каким образом инкрементировать счетчик ссылок при асинхронных операциях.
2. согласно этой схеме, usercontext содержит член-сокет который передает по ссылке методом socket() в async_accept() класса сервер. в нашей текущей структуре rpc_net_io этого сходу не сделаешь. придется допиливать. вот только как именно?

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


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


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

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



Цитата(boostcoder @  1.11.2010,  21:35 Найти цитируемый пост)
в нашей текущей структуре rpc_net_io

надеюсь что в контексте сказанного, она не подразумевается usercontext`ом ?



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


pattern`щик
****


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

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



Цитата(mes @  1.11.2010,  23:10 Найти цитируемый пост)
надеюсь что в контексте сказанного, она не подразумевается usercontext`ом ?

нет.

Добавлено через 1 минуту и 27 секунд
но ведь в usercontext`е она должна жить.

Добавлено через 14 минут и 35 секунд
самый простой вариант, для сервера, выкинуть rpc_net_io + rpc_inkom + rpc_outgo, и написать все методами. тогда вообще теряется весь смысл этих классов даже для клиента. т.к. не получится повторного использования кода.

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

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


pattern`щик
****


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

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



еще вариант: избавится от наследования от enable_shared_from_this.
но в таком случае, нам самим придется удалять контексты пользователя. а так как в asio нет ничего для того чтоб понять тут ли еще юзер, или пропал - придется реализовать пинговалку smile 
PM WWW   Вверх
mes
Дата 1.11.2010, 23:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


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


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

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



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



Это сообщение отредактировал(а) mes - 1.11.2010, 23:58


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


pattern`щик
****


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

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



Цитата(mes @  1.11.2010,  23:56 Найти цитируемый пост)
есть юзер контекст, который включает net_io (с инкомами и оутгоами) и это содержимое удалеятся так и так вместе с владельцем, а сам владелец  удаляется как и раньше, когда не нужен будет серверу.. 

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

Добавлено через 2 минуты и 46 секунд
если в rpc_net_io добавить свойство-тип_поинтера - счетчик инкрементируется. но декрементируется он тогда, когда rpc_net_io будет разрушен. но в текущей его архитектуре он не может быть разрушен... контексты удаляться не будут..

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


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


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

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



Цитата(boostcoder @  1.11.2010,  23:05 Найти цитируемый пост)
в таком случае, в rpc_net_io нужно передавать смартпоинтер, чтоб инкрементировать счетчик ссылок. но в клиенте он не нужен... 

зачем инкрементировать в нет_ио ?


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


pattern`щик
****


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

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



Цитата(mes @  2.11.2010,  00:08 Найти цитируемый пост)
зачем инкрементировать в нет_ио ? 

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

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


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


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

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



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

если соединение закрыто с сервера, то толку от выполнения ассинхронных операций ?
а если не закрыто, то какую операцию считать последней ?




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


pattern`щик
****


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

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



Цитата(mes @  2.11.2010,  00:16 Найти цитируемый пост)
если соединение закрыто с сервера, то толку от выполнения ассинхронных операций ?

не понял. мы ведь о сервере и говорим.

Цитата(mes @  2.11.2010,  00:16 Найти цитируемый пост)
а если не закрыто, то какую операцию считать последней ?

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


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


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

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



Цитата(boostcoder @  1.11.2010,  23:22 Найти цитируемый пост)
не понял. мы ведь о сервере и говорим.

я имел ввиду сам объект сервер.. который когда ему не нужно отпускает(удаляет) юзерконтекст..

.

Добавлено @ 00:26
Цитата(boostcoder @  1.11.2010,  23:22 Найти цитируемый пост)
у нас в любом случае получается последней операция чтения. т.к. клиент и сервер ждут данных от с противоположного конца. 

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

сейчас тогда подумаю.. 

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


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


pattern`щик
****


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

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



Цитата(mes @  2.11.2010,  00:24 Найти цитируемый пост)
я имел ввиду сам объект сервер.. который когда ему не нужно отпускает(удаляет) юзерконтекст..

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


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


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

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



Цитата(boostcoder @  1.11.2010,  23:28 Найти цитируемый пост)
все равно не понял  

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

Добавлено через 11 минут и 35 секунд
посмотрев освеженным взглядом.. согласен , что net_io как объект лишний..
тем более что он включает в себя кучу лишнего..хотя бы тред... 
но сами его операции, не лишние.. как инком и оутго.. 



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


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


pattern`щик
****


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

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



Цитата(mes @  2.11.2010,  00:29 Найти цитируемый пост)
при запросе клиентом соединения объект сервера создает юзерконтекст
при обрыве/закрытии его удаляет

да.

Цитата(mes @  2.11.2010,  00:29 Найти цитируемый пост)
нам нужно отдалить этот момент, чтоб успеть обработать уже пришедшие данные ..
так ?

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

принцип согласно этому коду: http://liveworkspace.org/code/dda59b3f3ab3...ce824a4aa58ec89
 после прихода нового клиента, вызывается метод server::handle_accept. в нем происходит вызов new_connection->start()
так вот, если user_context::start не создать асинхронную операцию типа такой:
Код

asyn_read(
   _socket,
   buffer,
   boost::bind(
      any_method,
      shared_from_this() <<<<<<<<<<<<<<< тут счетчик инкрементируется. и если, вдруг, метод который мы связали(any_method) не содержит
                                            следующей асинхронной операции, то счетчик декрементируется и становится равным нулю. все. юзерконтекст удален.
   )
);


Это сообщение отредактировал(а) boostcoder - 2.11.2010, 00:41
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.0741 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


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

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