Веб-библиотеки реального времени — заменить hookbox на socket.io или как?

У меня есть пара проектов, которые были созданы с использованием hookbox для управления передачей сообщений в реальном времени между веб-клиентами и серверами. Hookbox был великолепен — он полностью абстрагировал транспортный уровень, предоставляя простой интерфейс публикации/подписки по разным каналам с элегантной системой безопасности.

К сожалению, проект hookbox быстро пришел в упадок из-за нежелания первоначального сопровождающего даже приложить усилия для передачи права собственности. (Гррр!) Так что трудно больше считать это жизнеспособной платформой.

Какая хорошая платформа для обеспечения связи в реальном времени с веб-приложениями? Требования:

  • Безупречно работает в разных браузерах, используя веб-сокеты HTML5 или COMET, если они доступны. Выбор транспорта должен быть невидим для прикладного уровня. Мне плевать на древние браузеры (IE6)
  • Клиентский доступ как из javascript, так и из серверных систем (т.е. в php/python/ruby) – это критично
  • Предоставляет метафору публикации/подписки с произвольными полезными нагрузками.
  • Позволяет клиентам видеть, какие другие клиенты подключены к каналу, т.е.
  • Детализированный контроль доступа через обратные вызовы к любому веб-приложению (приятно иметь)

Я слышал, что socket.io может кое-что из этого сделать, но мне кажется, что он находится на нижнем уровне стека. Может ли он подключаться к библиотекам, отличным от javascript? Сделать авторизацию?


person Leopd    schedule 17.07.2011    source источник


Ответы (3)


Хотя я еще не пробовал, я начал искать в Pusher запись Node Knockout 2011. В дополнение к JavaScript он поддерживает следующие клиенты, отличные от js:

  • Цель-C
  • ActionScript
  • .NET и Silverlight
  • Рубин
  • Ардуино

Если возможен обмен сообщениями через третью сторону, вы можете бесплатно попробовать эту услугу, используя их план «Песочница» (20 подключений и до 100 000 сообщений в день) и посмотреть, соответствует ли она вашим потребностям. (Я немного не уверен в требовании «присутствия», хотя оно может быть описано в документации.)

person psema4    schedule 01.09.2011
comment
Открытый исходный код был бы хорош, как и клиенты PHP и Python, но в остальном это то, что я ищу. Спасибо! - person Leopd; 05.09.2011

У меня очень хороший опыт работы с NodeJS и Socket.IO за последние 8 месяцев. Компонент на стороне сервера был очень стабильным для меня - я могу оставить его работающим с очень большим объемом сообщений, и его резидентная память никогда не сдвинется с места выше 20 МБ. До сих пор я мог оставить его работающим только около 4 недель без остановки сервера, но это было только потому, что мне нужно было обновить мой код на стороне сервера.

Безупречно работает в разных браузерах, используя веб-сокеты HTML5 или COMET, если они доступны. Выбор транспорта должен быть невидим для прикладного уровня. Мне плевать на древние браузеры (IE6)

Предоставляет метафору публикации/подписки с произвольными полезными нагрузками.

Socket.IO также является фантастическим программным обеспечением. Он находится в активной разработке и имеет простую абстракцию в стиле pub/sub, построенную с использованием семантики EventEmitter (NodeJS) «on» (подписка) и «emit» (публикация). Это также очень прозрачно на стороне клиента в отношении используемого транспорта. Я использовал его в основном для прямой поддержки WebSocket, но он может вернуться к сокетам на основе Flash, опросу xhr и опросу jsonp.

Клиентский доступ как из javascript, так и из серверных систем (т.е. в php/python/ruby) – это критично

NodeJS — это JavaScript, работающий на движке V8. Он имеет массу модулей сторонних производителей, которые обеспечивают хорошие абстракции, а также взаимодействуют с внешними компоненты, такие как базы данных или очереди сообщений, среди прочего. Что касается попадания в систему с помощью php/python/ruby, это будет работать так же, как и при попадании на любой другой сервер. Выберите свой метод связи (базовый TCP/IP, или, может быть, HTTP POST или GET, или даже через файловую систему), и NodeJS на самом деле не волнует, кто предоставляет данные. Лично я реализовал клиент C#, который отлично работает.

Позволяет клиентам видеть, какие другие клиенты подключены к каналу, т.е.

Он не имеет встроенной логики «присутствия», хотя со встроенной логикой «публикации/подписки», уже имеющейся в Socket.IO, все, что вам нужно сделать, это сохранить состояние на сервере, чтобы новые клиенты могли получить существующие данные о присутствии. Я реализовал свой собственный базовый pub/sub на сервере, который сохраняет состояние, и все вместе (включая серверный код NodeJS и основные заглушки Socket.IO) это было всего 50 строк JavaScript (включая пробелы).

Детализированный контроль доступа через обратные вызовы к любому веб-приложению (приятно иметь)

Не уверен, что вы подразумеваете под «Металлическим контролем доступа через обратные вызовы к любому веб-приложению (приятно иметь)». Метафора pub/sub event/observer, которую они используют, использует обратные вызовы, поэтому вы привязываете определенные действия к конкретным событиям.

Сделать авторизацию?

У меня пока не было необходимости выполнять какую-либо авторизацию для наших систем, поэтому я не могу говорить с ней напрямую. Однако, если вы просмотрите модули NodeJS, вы заметите, что доступно множество модулей аутентификации, включая LDAP и OAuth, не говоря уже о один модуль, который утверждает, что поддерживает OpenId, Google, OAuth, Twitter, LinkedIn, Yahoo, Readability, Dropbox, Justin.tv, Vimeo, Tumblr, OAuth2, Facebook, GitHub, Instagram, Foursquare, Box.net, LDAP

person Matt    schedule 01.09.2011
comment
Конечно, довольно легко использовать любой язык для публикации сообщений в системе pub/sub с использованием интерфейса REST. Сложная и важная часть — это отправка сообщений в режиме реального времени на клиент, не поддерживающий JavaScript. Для получения обратных вызовов в реальном времени на другие языки требуется нетривиальная клиентская библиотека. - person Leopd; 03.09.2011

Я рекомендую использовать node.js, в котором есть множество библиотек для разных целей. Одной из библиотек для обмена сообщениями в реальном времени является now.js. У меня нет большого опыта в этом, но я пробовал, и я бы сказал, что это сработало хорошо и имеет все, что вам нужно.

person Godisemo    schedule 03.09.2011
comment
Не похоже, что он поддерживает каких-либо клиентов, отличных от javascript, или имеет какой-либо контроль доступа. - person Leopd; 03.09.2011
comment
Контроль доступа, скорее всего, можно добавить с помощью других библиотек для node.js. Как я понял ваш вопрос, вам нужен доступ из браузеров и серверной программы. Если вы пишете свой сервер в node.js, у вас есть и то, и другое. Я неправильно вас понял? - person Godisemo; 03.09.2011
comment
Да, вы неправильно поняли. Я ищу решение, а не API, который позволяет мне создать решение. - person Leopd; 05.09.2011