2009-05-31 4 views
2

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

ответ

1

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

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

PostgreSQL, похоже, имеет хорошую поддержку (даже PL/Python).

1

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

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

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

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

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

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

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

+0

Не ответил прямо на мой вопрос, но +1 для описания (а также для ссылки на Juggernaut, так как я использую Ruby). –