gpt4 book ai didi

php - 服务器发送事件重复发送数据

转载 作者:行者123 更新时间:2023-11-29 15:41:13 25 4
gpt4 key购买 nike

我是一名学生,正在为一个社交交易平台做一个项目。我想实现一个通知系统,我认为 SSE 是个好主意。但是,由于某种原因,我的 SSE 代码重复发送数据(我只想发送一次)。我在本地主机的 XAMMP APACHE 上运行这些脚本。

上交所 sse.php

<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
function sendMsg($id, $msg) {
echo "id: $id" . PHP_EOL;
echo "data: $msg" . PHP_EOL;
echo PHP_EOL;
ob_flush();
flush();
}
$serverTime = time();
sendMsg($serverTime, 'server time: ' . date("h:i:s", time()));
?>

客户端financials.php

<!DOCTYPE html>
<html>
<body>
<h1>Getting server updates</h1>
<div id="result"></div>

<script>
if(typeof(EventSource)!=="undefined")
{
var source=new EventSource("sse.php");
source.onmessage=function(event)
{
document.getElementById("result").innerHTML+=event.data + "<br>";
};
}
else
{
document.getElementById("result").innerHTML="Sorry, your browser does not support server-sent events...";
}
</script>

</body>
</html>

在此先感谢您提供的任何帮助:)。

最佳答案

SSE 旨在重复发送消息(例如,连接将始终打开,除非您调用 close 方法)。

Server-Sent Events (SSE) are a a part of the HTML5 specification. SSE allows a uni-directional persistent connection between a client and server, such that the client makes only a single request and the server keeps pushing data to the client continuously, until the connection is closed.

可以通过retry 字段设置频率。详细可以查看HERE .

在我之前的项目中,我使用id 字段来唯一标识一个事件。当客户端收到事件时,检查事件是否已经被处理。如果没有,处理它。否则,忽略它。您可以通过以下方式设置字段:

echo "retry: xx"
echo "id: xx"

不过既然要做交易系统,我觉得SSE不是个好主意。在我看来,SSE 适合大量传播消息,而不是将消息发送到特定客户端。我推荐网络套接字。

顺便说一句:永远不要忘记尾随的 '\n'...

关于php - 服务器发送事件重复发送数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18678727/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com