изменения в базе данных будут автоматически отображаться в веб-интерфейсе. Как это можно сделать! - PullRequest
0 голосов
/ 07 июня 2011

Я хотел бы знать, как новости или новое событие на странице Facebook автоматически вставляются как событие, или, я работаю программистом, я знаю только то, что мы получаем данные из базы данных, используя ajax без функции перезагрузки, но наоборот,изменения в базе данных будут автоматически отображаться в веб-интерфейсе. Как это можно сделать!Аякс!или триггером здесь или что!Прошу помощи

Ответы [ 4 ]

0 голосов
/ 07 июня 2011

Я не знаю, как это делает Facebook, я знаю, как бы я это делал с LAMP.

Есть два варианта - использование эмулированной полнодуплексной связи (или сервера PUSH, если хотите) и использованиефактическая полнодуплексная связь (протокол WebSockets).

Первая будет работать и в старых браузерах.В основном, через определенные промежутки времени вы запрашиваете базу данных.Используя Comet или регулярные длинные опросы, вы просто проверяете, есть ли новые записи, которые представляют интерес для текущего пользователя.Недостаток: неэффективно и не реально в реальном времени.

Второй будет работать только в новых браузерах (я не знаю, есть ли браузер, который реализует протокол WebSockets, кроме Chrome).Что происходит, так это то, что канал передачи данных идет двумя путями.Теперь ваш сервер может передавать клиенту информацию без необходимости запрашивать эти данные.Вверх: быстро, не тратит впустую, без накладных расходов, прост в использовании и реализации.Недостаток: работает только в небольшом количестве браузеров, протокол еще не завершен.

После того, как вы включили полнодуплексную связь между клиентом (браузером) и сервером, пришло время начать отправку данных!

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

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

Один такой UDF, который представляет интерес sys_exec .

Итак, чтобы сократить его, используя sys_exec и WebSockets:

Таблица MySQL получает данные.Триггер вызывается, триггер содержит.sys_exec ( 'your_program_that_dispatches_changes_around').Вызывается программа, отвечающая за отправку данных, и она собирает данные, которые необходимо отправить всем подключенным клиентам (браузерам).Программа отправляет данные.

Вы получили полнодуплексное решение в реальном времени.

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

0 голосов
/ 07 июня 2011

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

Посмотрите на команды setTimeout и setInterval .

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

Попробуй сам : Настройте простую страницу с парой DIV, используйте JQuery для запуска ajax через 2 минуты или каждые 30 секунд, и пусть этот ajax возвращает случайное число или цветовой код - что-то, чтобы изменить вашу страницу (даже не нужно быть базой данных).

См. Это на других страницах: Еще один способ наблюдать за эффектом - это использовать что-то вроде HTTPFox (добавление firefox) на одной из этих страниц, периодически будут появляться запросы на получение обновлений, и возвращая данные, которые затем могут быть использованы на вашей странице, как вам нравится.

0 голосов
/ 07 июня 2011

Я предполагаю, что вы имеете в виду такие функции, как всплывающие уведомления, когда вы автоматически получаете уведомление, когда кто-то прокомментировал и т. Д. (Т. Е. Комментарий о вас был добавлен в базу данных).

Существует ряд решений.чтобы сделать это: "опрос", "длинный опрос" и четные операции ввода-вывода, такие как node.js

0 голосов
/ 07 июня 2011

Comet сохраняет соединение открытым и позволяет передавать данные клиенту. По сути, вы отправляете данные на свой сервер (через ajax или обычный) и запускаете ответ на сервере (обычно записывая в файл).

Ответ отправляется на все открытые клиентские подключения.

Подробнее см. Comet и jQuery .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...