Re[6]: асинхронная сериализация
От: Evgeny.Panasyuk Россия  
Дата: 27.12.13 21:15
Оценка:
Здравствуйте, niXman, Вы писали:

X>как вариант — написать обертку над yas::*_oarchive:

X>
X>struct my_oarchive {
X>   template<typename T>
X>   my_oarchive& operator& (const T &o) {
X>      yas::*_oarchive::operator& (o);
X>      yield();
X>      return *this;
X>   }
X>};
X>


Ну да — я это и имел в виду в первом сообщении. (ранее я показывал пример
Автор: Evgeny.Panasyuk
Дата: 26.06.13
чего-то подобного, там даже ручной демультиплексор для наглядности).

EP>>Меня же интересует — существуют ли какие-нибудь другие удобные способы?

X>мне такие не известны. если найдешь — расскажи плиз.

Ок, хорошо.

EP>>Нет, изменение дерева не происходит.

X>так если у тебя неизменяемый объект — то что мешает таки реализовать свой ostream класс, и в нем, когда его внутренний буфер достигает предельного размера — отсылать собранные данные, и снова заполнять буфер следующими данными?
X>чтоб не было бауз в использовании сети — завести два буфера: первый отдаешь на отправку, второй — для сериализации в него. в хендлере отправки данных переключаешь буфера — второй на отправку, а первый для сериализации.

А как отдать управление io_service'у после первой отсылки? Ок, допустим мы как-то решили эту задачу. Но сериализация в большинстве случаев будет на порядки быстрее отправки/получения чанков.
Отправив первый чанк — мы заполним второй быстрее чем сообщение будет отправлено, и теперь у нас уже два неотправленных буфера. То есть мы вернулись к тому, с чего начали.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.