Пара вопросов для приложения websocket - PullRequest
1 голос
/ 07 марта 2011

В настоящее время я использую Jetty в качестве сервера веб-сокетов и пытаюсь создать игру в реальном времени. Я действительно новичок в этом. До сих пор мне удалось поработать над самым простым (это чат). Теперь у меня есть пара вопросов:

  1. Я пытаюсь составить список текущих пользователей, подключенных к серверу; как мне сделать такую ​​функцию? Я не знаю, насколько это практично, но моя идея состоит в том, что есть временной интервал, который позволяет серверу узнать, «Эй, я все еще жив». Я хочу, чтобы мой список пользователей был динамическим, чтобы в случае выхода из него список обновлялся.

  2. Я также пытаюсь создать "комнаты" для своего приложения. По сути, люди в «Комнате 1» не могут видеть, что делают люди в «Комнате 2»; другие функциональные возможности комнаты уже говорят сами за себя. У меня все еще нет идеи для этого; кто-то может порекомендовать способ реализовать это?

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

Спасибо всем заранее. : -)

(Хм, # 1 и # 2 могут быть решены исключительно с помощью Javascript?)

1 Ответ

2 голосов
/ 08 марта 2011

Ваш вопрос на самом деле не относится к конкретным причалам или веб-сокетам.

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

Во-первых, если вы еще не читали его, прочитайте эту статью: http://cometdaily.com/2010/03/02/is-websocket-chat-simple/

Во-вторых, рассмотрите возможность использования cometd , чтобы сделать этопроще - версия 2 (в настоящее время в бета-версии) поддерживает веб-сокеты.

Что касается ваших вопросов - вам нужно сделать 2 вещи (Cometd может помочь с этим)

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

  • ПОДКЛЮЧИТЕ «пользователя»
  • STILL_ALIVE
  • JOIN_ROOM "room1"
  • LEAVE_ROOM
  • GET_USER_LIST
  • SEND_MESSAGE "message"

И тогда вам нужны сообщения с сервера на клиент

  • RECEIVE_MESSAGE "user" "message"
  • RECEIVE_USER_LIST "room1"

Вам необходимо найти надежный способ отправки этих данных через веб-сокет,Вы можете изобрести свой собственный простой протокол (как в примере с чатом Jetty), вы можете использовать каналы JSON, XML или CometD.

2.Состояние на стороне сервера
Если у вас работает простой чат, то вы, должно быть, начали с этого, но вам нужен еще один способ отслеживания

  • как их зовут
  • к какому разъему они подключены
  • в какой комнате они находятся

В зависимости от того, насколько сложной станет ваша система, вы можете хранить ее в 1 большом синглтоне на сервере.

...