Масштабируемая, мультилогиновая архитектура сервер / клиент, которая не может передавать сообщения клиентам (только извлечение) - PullRequest
0 голосов
/ 17 октября 2019

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

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

Теперь по актуальным вопросам: какие шаблоны дизайна / кода будут полезны в таком сценарии, где приложение должнобыть масштабируемым и обслуживаемым? Я уже гуглил шаблон разделения Command / Query, но подписка на события была бы глупой, так как ни одно событие не может происходить без запроса (что привело бы к постоянной проверке событий ...)

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

1 Ответ

1 голос
/ 18 октября 2019

У вас действительно нет много вариантов здесь. Если вы управляете только клиентским кодом, то опрос клиента - это единственный путь.

Используя совместную работу клиента с клиентом, вы можете внедрить систему обмена сообщениями по принципу «сворачивайте сами», чтобы в любое время клиент обновлялсяобъект отправляет всем подключенным клиентам сообщение о том, что «объект XXX с идентификатором 123 был изменен», затем каждый клиент сам решает, нужно ли ему обновляться. Та же идея использовать реальную очередь сообщений была бы лучше, но похоже, что у вас есть ограничения на подключение, если вам нужно использовать сервер в качестве «дырокола NAT».

...