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