Я ищу способ создать простую таблицу HTML, которая может быть обновлена ??в режиме реального времени при событии изменения базы данных; в частности, добавлена ??новая запись.
Другими словами, подумайте об этом как о контрольной панели. Если выполняется продажа и добавлена ??новая строка в базе данных (в моем случае MySQL), веб-страница должна «обновить» таблицу новой строкой.
Я видел некоторую информацию о новом использовании, EVENT GATEWAY
но все примеры используют Coldfusion как «толкатель», а не «потребитель». Я хотел бы, чтобы Coldfusion обновлял / нажимал событие на шлюз, а также потреблял ответ.
Если это можно сделать, используя комбинацию AJAX и CF, пожалуйста, дайте мне знать!
Я просто хочу понять, с чего начать с обновлением в реальном времени.
Заранее спасибо!!
EDIT / Объяснение выбранного ответа:
Я закончил с ответом @ bpeterson76, потому что на данный момент это было проще всего реализовать в небольших масштабах. Мне очень нравится его предложение Datatables, и это то, что я использую для обновления практически в реальном времени.
Поскольку мой сайт становится больше (надеюсь), я не уверен, что это будет масштабируемое решение, так как каждый пользователь будет нажимать на страницу «слушателя», а затем запрашивать мою БД. Мой запрос относительно прост, но я все еще беспокоюсь о производительности в будущем.
На мой взгляд, хотя, поскольку HTML5 начинает становиться веб-стандартом, метод Web Sockets, предложенный @iKnowKungFoo, скорее всего, лучший подход. Комета с длинным опросом также является отличной идеей, но это немного громоздко реализовать / также, похоже, имеет некоторые проблемы масштабирования.
Итак, будем надеяться, что веб-пользователи начнут использовать более современные браузеры, поддерживающие HTML5, потому что Web Sockets - относительно простой и масштабируемый способ приблизиться к реальному времени.
Если вы чувствуете, что я принял неправильное решение, оставьте комментарий.
Наконец, вот несколько исходных кодов для всего:
Javascript:
Заметьте, это очень простая реализация. Он смотрит только на то, изменилось ли количество записей в текущем datatable, и если это так обновить таблицу и вызвать предупреждение. Производственный код намного длиннее и более активен. Это просто показывает простой способ приблизиться к обновлению в реальном времени.
<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>
Холодный синтез:
<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>