发出输出刷新到SSE

时间:2017-09-22 04:40:46

标签: php unix server-sent-events

我无法解决这个问题。

我目前正在其自己的文件中运行我的SSE(服务器发送事件)后端代码。

header('Content-Type: text/event-stream');
header('Cache-Control: no-cache'); // recommended to prevent caching of 
event data.

function sse_send($msg) {
  echo "id: " . time() . PHP_EOL;
  echo "data: " . $msg . PHP_EOL;
  echo PHP_EOL;
  ob_flush();
  flush();
  sleep(1);
}

我通过shell_exec()调用此文件,传递1个我想发送给客户端的变量。

我的问题是,我可以看到字符串被传递为$ argv [1],但我无法将其发送到客户端,因为它返回0.我可以手动将其输入到客户端发送功能,它会工作。我可以比较$ argv [1] ==='在这里插入它的值'如果我使用$ argv [1]或我赋予它的任何其他变量值,它会因为某种原因而无法发送给客户端。

1 个答案:

答案 0 :(得分:0)

使用外部文件的include(),而不是shell_exec()。它将更高效,更可靠(没有机会陷入安全模式限制),最重要的是,它应该可以工作。

我假设调用shell_exec()的php脚本正在Web服务器中运行。当你用shell_exec()调用一个php脚本时,它将它作为一个单独的php进程运行,并带有自己的stdin / stdout / etc.您需要在Web服务器内运行的流程中运行flush()ob_flush()也需要运行{。}}。