[英]How to fire EventSource SSE events?
我最近发现了EventSource,YUI3有一个Gallery模块来规范化和回退行为,这就是我在我的例子中选择使用的,因为我已经使用了该框架。
所以我搜索了很多,阅读了很多博客,帖子和例子,所有这些都显示了几乎相同的东西:如何设置基本的SSE事件。 我现在有6个开放/消息/错误/关闭事件触发的例子。
我没有(我希望这个链接会给我的)是一个如何解雇对我的应用程序更有用的SSE事件的例子,我正在尝试一个名为'update'的事件。
这是我的基本测试页面: http : //codefinger.co.nz/public/yui/eventsource/test.php (它可能是一个html文件,这里还没有php代码)
这是EventSource构造函数中的'message.php':
<?php
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache'); // recommended to prevent caching of event data.
/**
* Constructs the SSE data format and flushes that data to the client.
*
* @param string $id Timestamp/id of this connection.
* @param string $msg Line of text that should be transmitted.
*/
function sendMsg($id, $msg) {
echo "id: $id" . PHP_EOL;
echo "data: $msg" . PHP_EOL;
echo PHP_EOL;
ob_flush();
flush();
}
while(true) {
$serverTime = time();
sendMsg($serverTime, 'server time: ' . date("h:i:s", time()));
sleep(10);
}
// I was hoping calling this file with a param might allow me to fire an event,
// which it does dutifully, but no browsers register the 'data : update' - though
// I do see the response in Firebug.
if( $_REQUEST['cmd'] ){
sendMsg($serverTime, $_REQUEST['cmd'] );
}
?>
从上面的实例中,您可以看到我尝试使用YUI的io模块发送请求,使用param,在我点击“更新”按钮时触发我的“更新”事件。 它似乎工作,你可以在Firebug的Net面板中看到,但我的事件没有处理(我意识到上面的脚本将再次运行该循环,我只是想在连接的浏览器中处理我的事件,然后我将删除/清理)。
我这部分做错了吗? 还是有一些更基本的我做错了? 我正在尝试推送事件以响应我的UI状态变化。
这个问题似乎很接近,@ tomfumb评论说他的下一个问题是“如何在初始连接完成后向客户端发送新事件 - 现在我看到PHP必须永远不会停止执行。” 但我肯定只会发生事件......而不是连续......
您的方法有几个问题:
如果您选择继续使用SSE API,我会看到两种可能的情况
您还可以将XMLHttpRequest与(长)轮询一起使用,从而避免使用EventSource。 由于您的示例简单,我无法看到混合两种类型请求的理由。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.