Каков наилучший способ для координации клиентов javascript в одной бэкэнд-игре? - PullRequest
2 голосов
/ 30 июня 2010

Какой лучший способ использовать для уведомления клиента javascript об изменениях, происходящих в игре асинхронно (то есть о шагах, сделанных другими клиентами). В качестве примера рассмотрим пошаговую настольную игру. Должен ли я просто заставлять клиента опрашивать серверную часть PHP каждую секунду или около того, чтобы узнать новые ходы, или есть лучший способ отправить асинхронное уведомление другим клиентам в той же игре? Какова ваша лучшая идея для того, как распределить уведомление между экземплярами бэкэнда для каждого клиента?

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

Ответы [ 3 ]

2 голосов
/ 30 июня 2010

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

Цитирование Комета Daily: Длинный опросТехника :

Техника кометы с длинным опросом - это метод, который оптимизирует традиционный опрос для уменьшения задержки.

Традиционный опрос отправляет серверу XMLHttpRequest через фиксированные интервалы.Например, открывайте новый XMLHttpRequest каждые 15 секунд, получайте немедленный ответ и закрывайте соединение.

При длительном опросе отправляется запрос на сервер, но ответ не возвращается клиенту, пока он не будет доступен.,Как только соединение закрывается, либо из-за того, что клиент получил ответ, либо по истечении времени ожидания запроса, новое соединение инициируется.Результатом является значительное снижение задержки, поскольку сервер обычно устанавливает соединение, когда он готов вернуть информацию для возврата клиенту.

0 голосов
/ 30 июня 2010

Опрос может легко складываться и потреблять много ресурсов (например, пропускную способность), независимо от того, насколько легки ваши запросы и ответы.

http://ajaxpatterns.org/Periodic_Refresh

Возможно, вы захотите попробоватьи используйте Comet / HTTP Streaming http://ajaxpatterns.org/HTTP_Streaming

0 голосов
/ 30 июня 2010

К сожалению, есть только несколько вариантов для этого.Все это будет связано с наличием на сервере какого-либо клиента, отправляющего уведомления, если вы хотите использовать технологию push.Или же опрос - это путь.

Но как касательная, вот решение, с которым я играл много лет назад: http://www.spsolutionscorp.com/blog/2007/03/14/RealTimeUpdatesToWebPageUsingMacromediaFlash.aspx

Суть его была в следующем: Sql Server с сервисомБрокер включен.Служба .Net на сервере, использующем SqlDependency для прослушивания изменений в результате запроса (http://support.microsoft.com/kb/555893). После того, как произошли изменения, служба .net перебрала все соединения, которые были сделаны с флэш-клиента, о котором я писал в предыдущем блогеЗатем флэш-приложение могло обратиться к javascript на странице.

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...