再次使用stream_socket在一些实时系统上工作,并在客户端服务器上发送事件......因为我不是专业人士也不够聪明,不能自己解决案例。
这是我使用udp从一个服务器获取更新的东西,并希望通过服务器发送的事件或其他不使用api或库向用户显示数据。
php代码
<?php
$socket = stream_socket_server("udp://127.0.0.1:7755", $errno, $errstr,STREAM_SERVER_BIND);
if (!$socket) {
die ( "$errstr ($errno)<br />\n");
}
while (true) {
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$got= stream_socket_recvfrom($socket, 1500);// just say im getting time update every 1 second from the sender
echo $got;
flush();
}
?>
js part
var source = new EventSource("receive.php");
source.onmessage = function(event) {
document.getElementById("result").innerHTML + =event.data + "<br>";
};
答案 0 :(得分:0)
了解到php在完全执行之前不会回显。我将尝试更多选项以保持连接打开而不是再次请求文件。暂时这个工作仍然很好,但很少有数据包丢失,但仍有效。
<强> PHP 强>
<?php
$sock=stream_socket_server("udp://127.0.0.1:7755",$errno,$errstr,STREAM_SERVER_BIND);
if (!$sock) {
die("$errstr ($errno)");
}
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
$d=stream_socket_recvfrom($sock, 1500);
echo "data: {$d}\n\n";
flush();
?>
<强> JS 强>
var source = new EventSource("receive.php");
source.onmessage = function(event) {
document.getElementById("result").innerHTML + =event.data + "<br>";
};