我有一个Web应用程序,它从JS脚本发送一些数据到PHP服务器,然后将其插入到MySQL数据库中。我还需要通知所有其他客户端已经发送了数据并将其发送给他们。
我正在尝试使用Server-Sent Events来完成此操作,但我对概念有些困惑。这是我的代码:
$(document).ready(function() {
var source = new EventSource("../Server/insertMessage.php");
if(typeof(EventSource) == "undefined") {
alert("event source doesnt work");
} else { alert("event source works"); }
source.onmessage = function(event) {
alert(event.data);
// do stuff with event.data
};
});
在我的js脚本中,我向insertMessage.php发送一个带有POST参数的AJAX请求作为数据细节。这会触发服务器端事件吗?以下是我的服务器端代码:
insertMessage.php
if(isset(// check POST to see if the right request was sent)) {
// insert data into database
// ...
// ...
// Send the new data to listeners
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
// Create data array
$dataArray = array("data" => $data, "moreData" => $moreData);
// Encode JSON
$callback = json_encode($dataArray);
// Send it
echo "data: $callback";
flush();
}
当“事件源正常工作”警报被发送时,即使我正在调用insertMessage.php
进行AJAX调用,我也从未收到event.data
警报。也许我还没有完全理解服务器推送事件。我做错了什么?
push
数据。如果客户端与服务器之间没有活动连接,这是无法完成的。你应该寻找的技术最好是推送通知
或者websockets
。你也可以使用AJAX
,但它很棘手,需要每隔 N 秒向服务器发送请求以 "检查" 新数据。 - tftd