События через область применения для нескольких клиентов? - PullRequest
0 голосов
/ 15 февраля 2011

Прежде всего, я создаю что-то вроде клиент-серверного решения с использованием стандартного веб-сайта ASP.NET - я знаю, что этот метод не рекомендуется, и большинство людей хотели бы кричать "COMET!"или "Сокеты HTML5!"- но, пожалуйста, не делайте ;-)!

Что я делаю ...

Я создаю MMORPG на веб-сайте.

У меня есть несколько клиентов, с которыми нужно общаться одновременно.Это делается глобальным объектом в области приложения.

Моя проблема

Мне нужно вызвать событие для нескольких клиентов.Например, когда атака была выполнена, мне нужно обновить графику.Логика атаки разрешена в глобальном объекте, но каждый из клиентов должен ответить на это.

Сейчас я делаю следующее:

   fightTrace.Reciever.InvokeMoveEnded(this);
   fightTrace.FiredBy.InvokeMoveEnded(this);

(Это своего рода наблюдательpattern)

То, что сейчас происходит, это состояние гонки.Тот, кто загружает событие page_load, получит оба этих события, а тот, кто их не запускает, не будет испытывать никаких изменений в пользовательском интерфейсе.

Так чего же я действительно хочу?

Что мне действительно нужно, так это какой-то подлинный и приятный способ создания шаблона наблюдателя через состояние приложения.Мне нужно отправить событие каждому «слушателю», который в данном случае является клиентом, а затем выполнить какое-то обновление.

Один из способов сделать это - выполнить сеанс, используя true / false.Но мне бы очень хотелось как-нибудь получше!

Спасибо!

1 Ответ

0 голосов
/ 15 февраля 2011

Если я правильно понял ваш контекст, то всякий раз, когда состояние объекта вашего приложения изменяется, вы хотите синхронизировать всех клиентов ваших приложений.То, что вы забыли здесь, это поведение протокола HTTP без сохранения состояния.После того, как ответ отправлен, соединение потеряно, вам нужно снова отправить HTTP-запрос, чтобы он снова был обслужен.Однако вы можете эмулировать некоторые вещи, используя State Management и короткие и своевременные обновления на основе Ajax для моделирования подключенной среды.Однако я должен произнести слова, которые вы не хотите слышать.Не рекомендуется.

Вместо этого вы можете сохранить состояние объекта приложения и всякий раз, когда приходит запрос, обрабатывать ответ на основе обновленного состояния вашего объекта.Любое, как клиент должен инициировать запрос.

...