Есть ли способ «прослушать» событие базы данных и обновить страницу в реальном времени?

Я ищу способ создать простую HTML-таблицу, которая может обновляться в реальном времени при изменении базы данных; в частности, добавлена ​​новая запись.

Другими словами, воспринимайте это как административную панель управления. Если сделана продажа и в базу данных (MySQL в моем случае) добавлена ​​новая строка, тогда веб-страница должна «обновить» таблицу новой строкой.

Я видел некоторую информацию о новом использовании EVENT GATEWAY , но во всех примерах Coldfusion используется как «толкатель», а не «потребитель». Я хотел бы, чтобы Coldfusion обновлял / отправлял событие на шлюз, а также потреблял ответ.

Если это можно сделать с помощью комбинации AJAX и CF, пожалуйста, дайте мне знать!

Я просто хочу понять, с чего начать обновление в реальном времени.

Заранее спасибо !!

РЕДАКТИРОВАТЬ / Объяснение выбранного ответа:

В итоге я выбрал @ bpeterson76's ответ, потому что на данный момент это было проще всего реализовать в небольших масштабах. Мне очень нравится его предложение Datatables, и это то, что я использую для обновления, близкого к реальному времени.

Хотя мой сайт становится больше (надеюсь), я не уверен, будет ли это масштабируемое решение, поскольку каждый пользователь попадать на страницу "слушателя", а затем запрашивать мою БД. Мой запрос относительно прост, но я все еще беспокоюсь о производительности в будущем.

Однако, на мой взгляд, поскольку HTML5 начинает становиться веб-стандартом, метод веб-сокетов, предложенный @iKnowKungFoo, скорее всего, является лучшим подходом. Комета с длинным опросом - тоже отличная идея, но она немного громоздка для реализации / также, похоже, имеет некоторые проблемы с масштабированием.

Итак, будем надеяться, что веб-пользователи начнут внедрять более современные браузеры, поддерживающие HTML5, потому что веб-сокеты - это относительно простой и масштабируемый способ приблизиться к реальному времени.

Если вы считаете, что я принял неправильное решение, оставьте комментарий.

Наконец, вот исходный код всего этого:

Javascript:

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

<script src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.1/jquery.js"></script>
<script type="text/javascript" charset="utf-8">

var originalNumberOfRecsInDatatable = 0;
var oTable;

var setChecker = setInterval(checkIfNewRecordHasBeenAdded,5000); //5 second intervals

function checkIfNewRecordHasBeenAdded() {

        //json object to post to CFM page
        var postData = {
        numberOfRecords:  originalNumberOfRecsInDatatable 
        };

        var ajaxResponse = $.ajax({
        type: "post",
        url: "./tabs/checkIfNewItemIsAvailable.cfm",
        contentType: "application/json",
        data: JSON.stringify( postData )
        })

        // When the response comes back, if update is available
        //then re-draw the datatable and throw an alert to the user
        ajaxResponse.then(
        function( apiResponse ){

         var obj = jQuery.parseJSON(apiResponse);

         if (obj.isUpdateAvail == "Yes")
         {              
            oTable = $('#MY_DATATABLE_ID').dataTable();
            oTable.fnDraw(false);

            originalNumberOfRecsInDatatable = obj.recordcount;

            alert('A new line has been added!');
         }

        }
        );

    }
</script>

Coldfusion:

<cfset requestBody = toString( getHttpRequestData().content ) />

<!--- Double-check to make sure it's a JSON value. --->
<cfif isJSON( requestBody )>

<cfset deserializedResult = deserializeJSON( requestBody )>

<cfset numberOFRecords = #deserializedResult.originalNumberOfRecsInDatatable#>


<cfquery  name="qCount" datasource="#Application.DBdsn#" username="#Application.DBusername#" password="#Application.DBpw#">
    SELECT COUNT(ID) as total
    FROM myTable
</cfquery>

<cfif #qCount.total# neq #variables.originalNumberOfRecsInDatatable#>
    {"isUpdateAvail": "Yes", "recordcount": <cfoutput>#qCount.total#</cfoutput>}
<cfelse>
    {"isUpdateAvail": "No"}
</cfif>


</cfif>
33
задан AngeloS 30 June 2011 в 15:23
поделиться