Каков наилучший дизайн / способ поддерживать связь с пользователем? - PullRequest
9 голосов
/ 07 декабря 2010

Я работаю над POC для самообучения, в котором я хочу, чтобы мой пользователь был подключен в режиме LIVE.Например, игра, в которую могут играть 4 пользователя одновременно, здесь я должен держать этого пользователя подключенным к моей игре.

Я не очень хорош в программировании на сокете и люблю делать это с помощью сервисов. Что я хочу знать, так это «Каков наилучший способ сделать это».В соответствии с моим первоначальным штурмом мозга, я решил, что буду использовать SilverLight (в браузере или вне браузера) в качестве внешнего интерфейса [у меня нет проблем в этом].

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

  • Теперь настала очередь бросать кости

  • Домой осталось много пользователей (в случае, если некоторые из них ушли)

  • Как связаны статус пользователя в игре, например, оценка / обновление и обновление
    вид игры в соответствии с этим в его конце

Пожалуйста, разместите здесь свои лучшие ответы, которые помогут мне узнать это.

С уважением и благодарностью в Advance

РЕДАКТИРОВАТЬ:

Начальная награда, когда мне нужно больше отзывов.

FH

Ответы [ 3 ]

11 голосов
/ 07 декабря 2010

Fasih,

Поскольку HTTP не имеет состояния, вы не можете осуществлять двухстороннюю связь из своего кода.Но есть обходной путь, если вы используете AJAX.Как вы сказали, таймер является одним из способов.Другой называется COMET или Обратный AJAX.

Имитирует двустороннюю связь без использования таймера.Для этого вам необходимо выполнить длительные AJAX-вызовы на сервер, и вызов будет возвращен, только если есть изменения для обновления.Предположим простой сценарий веб-чата.2 пользователя делают длинные AJAX-вызовы на сервер, и оба опрашивают общий носитель (скажем, DB), если user1 отправляет некоторый текст, он обновляется, и ожидающий AJAX-вызов пользователя 2 берет текст и возвращается.И снова оба пользователя будут долго звонить, чтобы послушать друг друга.

Поскольку вы уже решили использовать Silverlight, вы можете использовать дуплексный канал WCF для эмуляции двухсторонней связи.Как я объяснил ранее, не используйте логику таймера.Это не мгновенно, если вы опрашиваете сервер в течение 10 секунд (в игре в течение 10 секунд может произойти все, что угодно, и это увеличит нагрузку на сервер, если вы будете опрашивать каждую секунду.

длительные вызовы AJAX.

Если вы ищете варианты, отличные от дуплексных каналов WCF, веб-сокеты HTML5 и COMET - другие пути.

ознакомьтесь с публикацией для браузеров, поддерживающих веб-сококеты.

1 голос
/ 04 января 2011

Если вы решили пойти на WCF, я бы посоветовал вам использовать обратные вызовы.

Подробнее здесь: WCF: Работа с односторонними вызовами, обратными вызовами и событиями

- Павел

1 голос
/ 03 января 2011

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

Каждое сообщение должно быть инкапсулировано как команда для клиента.Таким образом, вы можете использовать разные сообщения для каждой операции, на которую способен клиент.{команда: дисплей, текст: «пользователь бла-бла вошел в систему»} другая команда может выглядеть как {команда: rolldice, текст: «бросить кость»}

Дайте мне знать, что вы думаете ...

...