понедельник, 30 мая 2011 г.

Неудачное сочинение

Вот тут лежит неудачная статья для Хабра.

Неудачная, потом что:
1) какая-то "скомканная" получилась - особенно конец.
2) дальше песочницы не ушла.

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

Если кто-то (русскоговорящий) заинтересуется asio samples, то краткое пояснение он уже сможет почерпнуть по указанной выше ссылке.

11 комментариев:

niXman комментирует...

Прочел.
Если я правильно понял, то, к примеру, реализацию многопользовательского сервера нужно строить так, чтоб объект сессии клиента был Active_Object`ом?
Т.е. в этой статье Вы именно это и пытаетесь доказать?

зы
впервые услышал о таком паттерне.

Marat Abrarov комментирует...

В действительности, это уже и не "Active Object", но еще и не "Actor" (см. http://www.cse.wustl.edu/~schmidt/PDF/Act-Obj.pdf или просто http://www.google.com/search?hl=ru&q=active+object).
Поэтому я назвал эту схему по "наименьшей границе" (был спор с Dean Michael Berris по этому поводу).

Т.е. в этой статье Вы именно это и пытаетесь доказать?
Я пытаюсь доказать, что в многопоточной среде (зачастую) программы должны строится из таких вот "кирпичиков". За примерами далеко ходить не надо: Erlang.
Да, вы меня правильно поняли. Как когда-то с приходом ООП, все стали делать объектами, так теперь (с приходом многопоточных систем) пора переводить эти объекты на "активный" вариант (это сложно и не всегда нужно).

niXman комментирует...

Да, вы меня правильно поняли.
Но, если уж говорить о, к примеру, многопользовательском сервере, то сложно представить архитектуру, которую можно спроектировать иначе.
Ведь операции контекста(в контексте?) пользователя выполняются в этом контексте, и относительно данных этого контекста.

Хотя, можно конечно извратиться так, чтоб контекста пользователя не существовало. но бррр.. %)

niXman комментирует...

И да. Я привел пример сервера, клиенты которого имеют сессию и контекст сессии. С другими архитектурами(http?) не знаком.

Marat Abrarov комментирует...

Хотя, можно конечно извратиться так, чтоб контекста пользователя не существовало. но бррр.. %)
Т.е. Вы согласны с моим мнением?

С другими архитектурами(http?) не знаком
Понятие сессии (она же "контекст клиента") есть везде. Не везде контекст клиента привязан к TCP-сессии. В HTTP эту роль выполняют Cookie (или URL-rewriting).
Мне, в первую очередь, интересны chat-серверы, как наиболее универсальный (обобщенный) вариант коммуникационного сервера. Все остальные (особенно HTTP) гораздо проще.

niXman комментирует...

Т.е. Вы согласны с моим мнением?
Полностью.
Т.к. по роду службы занимаюсь именно разработкой протоколов/сервисов основанных на сессиях клиентов.

niXman комментирует...

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

Marat Abrarov комментирует...

"Active object" - это когда исполняющий ресурс (поток/пул потоков) полностью скрыт от "внешнего" кода. То, что описано в статье, уже ближе к "Actor", т.к. явно дает знать "внешнему" коду о том, кто/что будет исполнять код этого псевдо-"active object".
В статье есть ссылка на пост Dean Michael Berris где он строит классический "active object". Сравните. А потом посмотрите на http://theron.ashtonmason.net

был спор с Dean Michael Berris по этому поводу
С Dean Michael Berris я долго переписывался и в asio-users и напрямую, но так и не смог ничего ему доказать.

На самом деле, в двух проектах я использовал подобную технику.
Это не удивительно (для asio) - причины описаны в статье. Значит, есть кто-то еще заинтересованный в данной теме (кроме меня). Приятно слышать. Особенно, учитывая, что asio-samples уже 2 года.

niXman комментирует...


"Active object" - это когда исполняющий ресурс (поток/пул потоков) полностью скрыт от "внешнего" кода. То, что описано в статье, уже ближе к "Actor", т.к. явно дает знать "внешнему" коду о том, кто/что будет исполнять код этого псевдо-"active object".

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

Marat Abrarov комментирует...

Про "Active Object" очень хорошо написано вот здесь: http://www.cse.wustl.edu/~schmidt/PDF/Act-Obj.pdf
Там же в конце говорится про "Actor", который... является логическим продолжением "Active Object".

niXman комментирует...

Да. Именно это и читал. И еще что нашел в гугле. Но нужно "закрепить" информацию. Т.к. пока что в голове каша.