Поздний ответ, но ...
Я недавно развернул свое веб-приложение для развлечений ( jounce.space ), которое использует веб-сокет для всего, кроме аутентификации.
Веб-сокет используется как для данных, передаваемых сервером, так и для транзакций, инициируемых клиентом.
Сайт предлагает несколько различных развлечений типа бильярдного шара. Вместо битка игрок управляет мячом с помощью эластичной ленты, соединяющей мышь с мячом. В отличие от пула или бильярда, вы играете непрерывно: вы не ходите по очереди.
Резинка решает (или минимизирует) проблемы с задержкой, потому что игрок, естественно, ожидает задержку при управлении с помощью резинки.
Сервер запускает модель игры, отправляя обновленные позиции мяча и игровые события каждые 40 мс через веб-сокет. Каждый клиентский компьютер отвечает своей текущей позицией мыши.
Помимо передачи игровых данных в реальном времени, сокет также отправляет / получает сообщения о прибытии и отъезде игрока, игровые анонимы и чат.
Данные отформатированы в формате JSON, например, каждые 40 мс это отправляется каждому клиенту:
{
"frameN": frame_sequence_num,
"cpuLoad": frame_update_us/frameRate,
"players":{
<playerId>:[posX, posY, MouseX, MouseY],
.
.
.
}
}
Иногда данные кадра поступают не по порядку, поэтому, если frame_sequence_num меньше предыдущего, эти данные кадра игнорируются.
Посылая всем игрокам положение мыши, можно видеть резинку друг друга.
Jounce.space живёт с этого поста. Посетите и «просмотрите исходный код» для более детального изучения клиентской части. Э-э, предупреждение, код еще не хорош; это мешанина рекламы, но она работает хорошо (за исключением MSIE). Сервер, написанный на golang, расположен по адресу openshift.redhat.com .