События HTML5, отправленные сервером через cURL

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

  1. Страница «Отправленные сервером события» (sse.html) будет ссылаться на source.php для содержания уведомлений.
  2. action.php содержит действие, которое инициирует уведомление об изменении содержимого путем вставки данных в таблицу.
  3. source.php будет периодически проверять наличие новых данных в таблице. Он должен передать уведомление, если оно есть.

Мой вопрос возможно ли это сделать без проверки таблицы?

Я думаю об использовании cURL для прямой отправки контента в source.php, когда выполняется действие в action.php. Можно ли это сделать?

Я видел, как cURL используется с заголовком HTTP Content-Type, установленным на text/event-stream, но я не знаю, как его использовать.

sse.html

<!DOCTYPE html>  
<html>  
<body>  
  <script>  
    var source = new EventSource('source.php');  
    source.onmessage = function(event){  
      var text = event.data;  
      window.webkitNotifications.createNotification('', 'Alert', text).show();  
    }  
  </script>  
</body>  
</html>

source.php

header("Content-Type: text/event-stream");
header("Cache-Control: no-cache");

mysql_connect("localhost", "user", "pass");
mysql_select_db("eventstream");

$q = mysql_query("select textnotif from notification where read='0'");
$r = mysql_fetch_array($q);

$notif = $r[textnotif];

if($notif != ""){  
    echo "data: ".$notif.PHP_EOL;  
}

person mosh    schedule 19.09.2011    source источник


Ответы (1)


Чтобы ответить на ваш вопрос:

... возможно ли это сделать без проверки таблицы?

No.

Ваш PHP-скрипт должен проверить таблицу SQL, чтобы увидеть, не изменились ли какие-либо данные. Единственный способ, которым PHP может проверить наличие изменений в базе данных, — это запросить базу данных.

person Alex    schedule 19.09.2011
comment
Стоит добавить, что есть лучшие способы сделать это, например pub/sub с использованием очереди сообщений. Посмотрите это видео: vimeo.com/20605470. - person igorw; 27.12.2011