現在、クライアントソリューションをSSEに更新しています。これはCodeigniterとクライアントに基づいており、JavaScriptを使用しています。私はSSEが初めてです。私はRest APIコントローラーで以下のコードを実行しました。クライアントでサーバー送信イベントJsonおよび更新クライアントを読み取る
function server_sent_events_get()
{
while (true) {
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$mac = $this->get('macaddress');
$scheduleid = $this->get('scheduleid');
$modifiedon = urldecode($this->get('modifiedon'));
$device_result = $this->read_devices_xml_json($mac);
$schedule_result = $this->read_schedules_xml_json($scheduleid, $modifiedon);
echo "event: schedule_status\n";
echo "data: " . json_encode($schedule_result) . "\n\n";
echo "event: device_status\n";
echo "data: " . json_encode($device_result) . "\n\n";
sleep(2);
}
}
私は、コンソールにはエラーはありませんジャバスクリプト
if(typeof(EventSource) !== "undefined") {
var source = new EventSource("../admin/server/macaddress/000000000002/scheduleid/111/modifiedon/0000-00-00%2000:00:00/format/json");
source.onopen = function(event){
document.getElementById("result").innerHTML += "opened<br>";
// console.log(event);
};
source.onmessage = function(event) {
document.getElementById("result").innerHTML += event.data + "<br>";
// console.log(event);
};
source.onerror = function(event){
document.getElementById("result").innerHTML += "error<br>";
// console.log(event);
};
source.addEventListener('device_status', function(e) {
var data = JSON.parse(e.data);
console.log("device_status");
console.log(data);
}, false);
source.addEventListener('schedule_status', function(e) {
var data = JSON.parse(e.data);
console.log("schedule_status");
console.log(data);
}, false);
} else {
document.getElementById("result").innerHTML = "Sorry, your browser does not support server-sent events...";
}
の下に持っています。しかし、私は私が必要なものを得ていない。私は1秒ごとにその戻り値のdevice_statusを見ました。どうして?私の添付ファイルを確認してください。
基本的に2つのXMLファイルがあります。 1つはデバイス用で、もう1つはスケジュール用です。プライベート関数では、XMLファイルを読んでクライアントに値をプッシュしています。どこで逃したの?私にお知らせください。