Реализация Comet на стороне базы данных - PullRequest
2 голосов
/ 01 июня 2009

Это больше из любопытства и "для будущего использования", чем что-либо еще, но как Comet реализуется на стороне базы данных? Я знаю, что большинство реализаций используют долгоживущие HTTP-запросы, чтобы «подождать», пока данные не станут доступны, но как это сделать на стороне сервера? Как веб-сервер узнает о появлении новых данных? Постоянно ли опрашивает базу данных?

Ответы [ 2 ]

1 голос
/ 01 июня 2009

Какую БД вы используете? Если он поддерживает триггеры , что делают многие СУБД в той или иной форме или в другой форме, тогда вы можете запустить триггер, который фактически сообщает HTTP-запросу об отправке соответствующего ответа.

Триггеры устраняют необходимость опроса ... опрос, как правило, не лучшая идея.

PostgreSQL , кажется, имеет довольно хорошую поддержку (даже PL / Python).

1 голос
/ 01 июня 2009

это очень сильно зависит от приложения. Наиболее вероятная реализация - это какая-то система обмена сообщениями.

Скорее всего, ваш серверный код будет состоять из нескольких частей:

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

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

Способ реализации обмена сообщениями, опять же, очень сильно зависит от приложения. Очень простая реализация просто использует таблицу базы данных с именем messages и опрашивает ее.

Но в зависимости от стека, который вы планируете использовать, должны быть доступны более сложные инструменты.

В Rails я использую Джаггернаут , который просто слушает какой-то сетевой порт. Всякий раз, когда есть данные для отправки, сервер приложений Rails открывает соединение с этим push-сервером juggernaut и сообщает ему, что отправлять клиентам.

...