gpt4 book ai didi

javascript - 使用 PHP 的服务器发送事件

转载 作者:行者123 更新时间:2023-11-29 01:54:51 25 4
gpt4 key购买 nike

我有一个 web 应用程序,它将一些数据从 js 脚本发送到 php 服务器,然后将它插入到 mysql 数据库中。我还需要通知所有其他客户端数据已发送并发送给他们。

我正在尝试使用服务器发送的事件来执行此操作,但我在理解这个概念时遇到了一些困难。这是我的代码:

$(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 脚本的其他地方,我将 AJAX 请求发送到 insertMessage.php,并将 POST 参数作为数据详细信息。这会触发服务器端事件吗?这是我的服务器端代码:

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();
}

虽然发送了“事件源工作”警报,但我从未收到 event.data 警报,即使我正在对 insertMessage.php 进行 AJAX 调用。我可能还没有完全理解 Server-Sent Events。我做错了什么?

最佳答案

您不能以这种方式使用服务器发送的事件:

使用这个:

session_write_close();//在你回应之前关闭 session !它可以帮助您的客户端在执行期间向您的服务器创建新请求。

    $echo= "id: $time" . PHP_EOL; // Important!
$echo.= "retry: ".$retry_time."" . PHP_EOL; // Handle reconnect time (ms)
$echo.= "event: message" . PHP_EOL; // Event message type
$echo.= "data: {\n"; // JSON
$echo.= "data: \"data\": \"$data\" \n"; // JSON
$echo.= "data: }\n"; // JSON
$echo.= PHP_EOL; // Important!

换行符在 Eventsource 中非常重要!

您可以将 PHP 用于 SSE,但请始终记住,您应该在执行期间尽快关闭 SESSION!

我的压力测试结果:(服务器配置:4Core@2.3Ghz,8Gb Ram,100/100Mbit)Ubuntu 14.04+Apache,最大连接数:1024

100 个连接负载 = 0.14,1 个 SQL 查询/滴答和 1 秒刷新率。

活跃用户低于 500-600 时,即使使用 Apache,您也可以毫无问题地使用 PHP for SSE。

关于javascript - 使用 PHP 的服务器发送事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32115833/

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