Инстанс контейнера зависимостей на каждое соединение ?

Обсуждаем, как правильно строить приложения
Ответить
sda
Сообщения: 334
Зарегистрирован: 2013.12.19, 09:29

Инстанс контейнера зависимостей на каждое соединение ?

Сообщение sda »

Клиенты устанавливают постоянное сокет соединение с сервером. Правильно ли для каждого сокета инстанциировать собственный экземпляр контейнера зависимостей ?

Приложение работает как демон т.е не умирает после ответа клиенту и держит соединение постоянно. Обработка запросов выполняется асинхронно в одном процессе.
chesar
Сообщения: 514
Зарегистрирован: 2013.04.10, 17:49

Re: Инстанс контейнера зависимостей на каждое соединение ?

Сообщение chesar »

Сложный вопрос, думаю зависит от логики используемых сервисов. Если есть такие сервисы состояние которых должно быть единым для всех клиентов, то нет.
sda
Сообщения: 334
Зарегистрирован: 2013.12.19, 09:29

Re: Инстанс контейнера зависимостей на каждое соединение ?

Сообщение sda »

На текущий момент проблема как раз в том что есть сервисы состояние которых должно быть уникальным для каждого клиента. Например обьект сессии и еще несколько. Их не много но они есть. Поэтому один общий контейнер на все приложение не работает.
Аватара пользователя
samdark
Администратор
Сообщения: 9489
Зарегистрирован: 2009.04.02, 13:46
Откуда: Воронеж
Контактная информация:

Re: Инстанс контейнера зависимостей на каждое соединение ?

Сообщение samdark »

Вот и ответили на свой вопрос...
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Инстанс контейнера зависимостей на каждое соединение ?

Сообщение anton_z »

Свой объект контерйнера на каждый запрос не очень. Есть контейнеры, которые позволяют определять стиль жизненного цикла объектов. Singleton, Per Request, Unique instance. Что у вас за платформа? В С# есть CastleWindsor и Unity. В них реализована данная функциональность. Чтобы решить вашу проблему, вам нужен правильный контейнер (только не пишите свой).
sda
Сообщения: 334
Зарегистрирован: 2013.12.19, 09:29

Re: Инстанс контейнера зависимостей на каждое соединение ?

Сообщение sda »

anton_z платформа nodejs. Когда искал готовые контейнеры на javascript не смог найти даже просто популярного и живого, не говоря уже о упомянутой функциональности. Есть свой, но я готов его заменить на "правильный" если такой существует в node.
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Инстанс контейнера зависимостей на каждое соединение ?

Сообщение zelenin »

мне кажется, это все попытка захачить то, что изначально приложение не учитывало работу с несколькими пользователями одновременно (это привычно для php - обработал реквест и умер).
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Инстанс контейнера зависимостей на каждое соединение ?

Сообщение anton_z »

По node ничего сказать не могу, не работал с ней. В\ижу два выхода:
1. Не заморачиваться. Оставить как есть - инстанс на запрос.
2. Разобраться как реализовано, например, здесь https://github.com/castleproject/Windso ... estyles.md и попробовать запилить свое (если есть время, силы и средства и ваш менеджмент не против))
sda
Сообщения: 334
Зарегистрирован: 2013.12.19, 09:29

Re: Инстанс контейнера зависимостей на каждое соединение ?

Сообщение sda »

anton_z мне нравится идея с Per Request и я считаю её верной. Проблема лишь в том, что в node нет возможности получить текущий контекст выполнения. Проще говоря, нет инструментов из коробки, чтобы понять, какой запрос сейчас обрабатывает нода первый, второй или может быть третий. Соответственно и научить контейнер создавать объекты Per Request не получится.

Я конечно же ничего не понимаю в C# но погуглил и кажется там есть возможность получить текущий контекст запроса. Соответственно и сделать контейнер с фичей Per Request нет проблем.

В node я нашел только одну возможность это реализовать используя эту библиотеку. Суть в том, что на каждый пришедший запрос надо создать свой контекст выполнения и внутри него делать обработку запроса. Тогда можно будет устанавливать/получать значения переменных имеющих отношение именно к текущему контексту выполнения. Библиотека делает то, что по-сути должно быть в ядре node.

Мне не очень нравится такое решение. Будет глупо потом выгрузить такой контейнер в opensource и требовать от пользователей ставить какую-то библиотеку, создавать какие-то контексты если они хотят объекты Per Request. Среднестатистический пользователь вообще не поймет о чем речь :mrgreen:
anton_z
Сообщения: 483
Зарегистрирован: 2017.01.15, 15:01

Re: Инстанс контейнера зависимостей на каждое соединение ?

Сообщение anton_z »

А что плохого в том, что контейнер будет от библиотеки зависеть? В node нет менеджера зависимостей? Если она поможет реализовать то, что вы хотите в контейнере, то почему бы ее не использовать. Какая разница что другие разрабы подумают, вы в первую очередь свою задачу решаете.
sda
Сообщения: 334
Зарегистрирован: 2013.12.19, 09:29

Re: Инстанс контейнера зависимостей на каждое соединение ?

Сообщение sda »

anton_z спасибо попробую реализовать это с помощью данной библиотеки.
Ответить