我刚开始使用PHP和Server Sent Events。 在查看了几篇文章之后,比如W3C和HTML5Rocks,我能够非常快速地获得一些内容。
我现在要做的是在我的php脚本收到POST时发送Server Sent事件。这是我天真的尝试:
<?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();
}
$method = $_SERVER['REQUEST_METHOD'];
if ($method == 'POST') {
$serverTime = time();
$data = file_get_contents("php://input");
sendMsg($serverTime,$data);
}
?>
这似乎不起作用,但我找不到原因。 我看不到任何错误并使用JS我可以看到客户端可以连接, 但是在执行POST操作时没有数据通过。
当服务器收到POST时,建议发送Server Sent Event的方法是什么?
答案 0 :(得分:1)
我将直接引用my SSE book,第9章,“带有SSE的HTTP POST”部分:
如果您购买本书只是为了学习如何将变量发布到SSE 后端,你直接转到这一部分,我想你 深吸一口气,确保你坐下。你看,我 有一些坏消息。 ...... SSE标准无法允许你 POST数据到服务器。这是一个非常烦人的疏忽,......
另一种方法是回到前SSE替代方案(因为imagemin-jpeg-recompress
,即AJAX,允许POST);这本书的内容非常详细。
实际上,还有另外一种解决方法,考虑到您使用的PHP实际上相当容易:首先将数据发布到另一个脚本,使用它将您的POST数据存储在XMLHttpRequest
中,然后使用您的SSE脚本从$_SESSION
中获取。 (这听起来并不像听起来那么难看:SSE进程将会长时间运行,因此可以接受一次额外的http调用来设置它。)