2013-02-09 2 views
4

Вчера я погрузился в события Server-Sent, так как они были отличным способом создания новостей для онлайн-игры, которую я создаю. У меня был рабочий сценарий, который мог подписаться на мой канал, и скрипт, который мог бы вытащить ленту новостей из базы данных MySql в течение нескольких минут, но по какой-то причине он отключает соединение каждый раз ... (и перестраивает каждые 3 секунды, не делая ничего лучше, чем просто с помощью AJAX с определенными интервалами времени, например)Мое соединение с использованием Server-Sent Events (и Javascript/PHP) продолжает немедленно снижаться

Javascript я использую:

var source = new EventSource('http://theobg.itselementary.site50.net/gamefeed.php'); 
source.onmessage = function(e) { 
    $("#gamefeed").html(e.data); 
} 

РНР Я использую:

<?php 
header('Content-Type: text/event-stream'); 
header('Cache-Control: no-cache'); 
header('Connection: keep-alive'); 

function sendMsg($id, $msg) { 
    echo "id: $id" . PHP_EOL; 
    echo "data: $msg" . PHP_EOL; 
    echo PHP_EOL; 
    ob_flush(); 
    flush(); 
} 

//The file for connecting to my database here... 
$gameid = 1; 

$serverTime = time(); 
//Some mysql query to get the gamefeed from the database here..., gamefeed is structured like this: NEWS&OTHERNEWS&OLDERNEWS&EVENOLDERNEWS 

sendMsg($serverTime, $gamefeed); 

?> 

Я смотрел на всем протяжении в Интернете, но все, кажется, отлично работает со мной, кроме f или связь не «жива», и я понятия не имею, почему это ... может кто-нибудь мне помочь?

Спасибо заранее, Dalionzo

ответ

2

Вы должны проверить данные и отправить его с помощью цикла.

<?php 
while(true){ 
    //check for updates here 
    if($updates){ 
     sendMsg($id,$data); 
    } 
    sleep(1);//loosen it up 
} 

Кроме того, для упрощения кодирования вы можете попробовать мою библиотеку php для событий, отправленных сервером. Here

+0

Спасибо, что ответили, но все, что делает, отправляет бесконечные обновления на мою главную страницу, вызывая ее сбой; я совершенно не понимаю здесь? Или мне еще нужно выяснить и добавить свой собственный код для проверки того, изменились ли данные? – Dalionzo

+0

Вам нужно добавить вызов для сна, чтобы ослабить его. – Licson

+0

У меня есть новая логика, проверьте ее. – Licson