Это больше из любопытства и «для справок в будущем», чем что-либо, но как комета реализована на стороне базы данных? Я знаю, что большинство реализаций используют долговечные HTTP-запросы для «ожидания» до тех пор, пока данные не будут доступны, но как это делается на стороне сервера? Как веб-сервер знает, когда доступны новые данные? Постоянно ли он проверяет базу данных?Реализация кометы на стороне базы данных
ответ
Что вы используете? Если он поддерживает триггеры, которые многие РСУБД выполняют в какой-либо форме или форме, тогда у вас может быть триггерный огонь, событие, которое фактически сообщает HTTP-запросу отправить соответствующий ответ.
Триггеры устраняют необходимость опроса ... опрос, как правило, не самая лучшая идея.
PostgreSQL, похоже, имеет хорошую поддержку (даже PL/Python).
Это очень зависит от приложения. Наиболее вероятная реализация - это своего рода система обмена сообщениями.
Скорее всего, ваш код на сторону сервера будет состоять из довольно многих частей:
- несколько приложений-серверов, которые hansle входящих запросов,
- а (отдельный) комета сервера, который имеет дело со всеми открытыми соединениями клиентам,
- база данных, и
- своего рода инфраструктуры обмена сообщениями
последний на e, инфраструктура обмена сообщениями действительно является ключом. Это дает возможность серверам приложений разговаривать с кометным сервером. Поэтому, когда запрос поступает на сервер приложений, он отправляет сообщение в очередь сообщений, сообщая серверу кометы, чтобы уведомить нужного клиента (клиентов)
Как реализована передача сообщений, в тоже время зависит от приложения. Очень простая реализация будет просто использовать таблицу базы данных, называемую messages
, и опросить это.
Но в зависимости от стека, который вы планируете использовать, должно быть больше доступных инструментов.
В Rails я использую Juggernaut, который просто прослушивает какой-либо сетевой порт. Всякий раз, когда есть данные для отправки сервера приложений Rails, открывается соединение с этим сервером push juggernaut и сообщает ему, что отправить клиентам.
Не ответил прямо на мой вопрос, но +1 для описания (а также для ссылки на Juggernaut, так как я использую Ruby). –