1 回答

TA貢獻(xiàn)1847條經(jīng)驗 獲得超7個贊
我現(xiàn)在正在使用 SSE 服務(wù)器發(fā)送的事件并且它可以工作!但是我想知道我的代碼是否“正確”或者是否有更“合適”的方法。
我正在使用會話 superglobals 將服務(wù)器信息更改傳遞給另一個文件,該文件不斷將其作為事件流讀?。ㄟ@就是 SSE 的工作方式)。
索引.php:
<!DOCTYPE html>
<html dir="ltr">
<head>
<meta charset="utf-8">
<script type="text/javascript" src="jquery.js">
</script>
<script type="text/javascript" src="stream.js">
</script>
</head>
<body>
<a>Receive message</a>
</body>
</html>
stream.js(監(jiān)聽服務(wù)器):
var serv = new EventSource("server.php");
serv.onmessage = function(e) {
var jdata = JSON.parse(e.data);
console.log(jdata.message);
};
serv.onopen = function(e) {
console.log('Connection opened');
}
$(document).ready(function(){
$('a').click(function(){
receive_msg();
});
});
function receive_msg(){
$.ajax({
type: "POST",
url: 'controller.php',
data: {action: 'send'}
});
}
控制器.php:
<?php
session_start();
if (isset($_POST['action'])) {
$_SESSION['server']="you have received a message";
}
服務(wù)器.php:
<?php
session_start();
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
if (isset($_SESSION['server'])) {
$data = array(
'message'=> $_SESSION['server']
);
$data = json_encode($data);
echo "data: {$data}\n\n";
unset($_SESSION['server']);
}
它的工作方式:
客戶端連接到 server.php 并不斷讀取文件。當(dāng)服務(wù)器要向客戶端發(fā)送消息時,它會創(chuàng)建一個會話變量。Server.php 讀取變量并將其傳遞到我的 js 文件。然后變量被銷毀,所以我們只傳遞一次消息。
- 1 回答
- 0 關(guān)注
- 262 瀏覽
添加回答
舉報