class MyController extends AppController {
public function someAction() {
//........
$event = new CakeEvent('Controller.MyController.example', $this, array(
'data' => $someData
));
$this->getEventManager()->dispatch($event);
//.........
}
}
并在config/bootstrap.php中添加了以下行:
require_once APP . 'Config' . DS . 'events.php';
在config/events.php中
App::uses('CakeEventManager', 'Event');
App::uses('MyListener', 'Lib/Event');
// Global Listener
CakeEventManager::instance()->attach(new MyListener());
在lib/event/mylistener.php中
App::uses('CakeEventListener', 'Event');
class MyListener implements CakeEventListener {
public function implementedEvents() {
return array(
'Controller.MyController.example' => 'example',
);
}
public function example(CakeEvent $event) {
/*Do some optional manipulation with the $event->data,then send the data using event stream.
How can I call some another Controller to create event stream ?
(Should I create Event Stream here itself? If yes, how?)
I know how to create event stream in simple php :
header('Content-Type: text/event-stream');
header('Cache-Control: no-cache');
header('Connection: keep-alive');
echo "data: $someData\n\n";
flush();
*/
}
}
PS:我使用Cakephp事件是因为它允许我在一个地方从不同的控制器收集所需的数据,然后从那里,我可以创建事件流(服务器发送的事件)。如果有更好的选择,请分享。
我认为这个问题很宽泛,要用一个合理的长文本来回答。因此,我建议您阅读这个问题和前两个答案服务器发送的事件和php是什么触发服务器上的事件?因为它很相似,很好地解释了SSE。
如果您了解SSE,您就会意识到您需要一个在循环中运行的php进程。我认为,来自libSSE库的代码或多或少是自我解释的。
class YourEventHandler extends SSEEvent {
public function update(){
//Here's the place to send data
return 'Hello, world!';
}
public function check(){
//Here's the place to check when the data needs update
return true;
}
}
$sse = new SSE();//create a libSSE instance
$sse->addEventListener('event_name',new YourEventHandler());//register your event handler
$sse->start();//start the event loop
您可以通过使用CakePHP shell实现这一点来归档相同的内容。
概述 客户端代码 概述 建立连接 open事件 message事件 error事件 自定义事件 close方法 数据格式 概述 data:数据栏 id:数据标识符 event栏:自定义信息类型 retry:最大间隔时间 服务器代码 参考链接 概述 传统的网页都是浏览器向服务器“查询”数据,但是很多场合,最有效的方式是服务器向浏览器“发送”数据。比如,每当收到新的电子邮件,服务器就向浏览器发送一个“
概述 客户端代码 概述 建立连接 open事件 message事件 error事件 自定义事件 close方法 数据格式 概述 data:数据栏 id:数据标识符 event栏:自定义信息类型 retry:最大间隔时间 服务器代码 参考链接 概述 传统的网页都是浏览器向服务器“查询”数据,但是很多场合,最有效的方式是服务器向浏览器“发送”数据。比如,每当收到新的电子邮件,服务器就向浏览器发送一个“
问题内容: 我正在尝试使用SSE将JSON数据发送到浏览器,但似乎无法正确处理,而且我也不知道为什么。 服务器端看起来像这样: 如您所见,我已经注释掉了帖子内容,但最终我希望将testdata用作JSON本身,如下所示: 客户端看起来像这样: 我看到控制台日志,但 没有看到警报。 问题答案: 尝试发送适当的JSON(输出中未引用): 但最好:
我正在尝试在Ruby Grape API上创建服务器发送的事件。问题是,连接似乎总是很快关闭,因为我一直在测试网页上看到连接关闭事件。 客户端连接到服务器,因为我可以看到正在调用的方法,但我想知道为什么连接不是恒定的,为什么我没有收到我使用Thread发送的数据。 以下是我的Ruby代码: 以下是我的Javascript: 编辑:我使用GET方法实现了它(我将Grape::API更改为Sinatr
我试图让服务器发送的事件与Mozilla Firefox一起工作。给定一个Spring Boot的网络服务 使用Chrome浏览器或Edge(始终是最新版本)可以正常工作。我可以在网络分析器选项卡中看到未完成的请求,并且每秒都会显示一个新的时间戳。 然而,当我使用Firefox(84.0.2或更早版本)时,请求也会显示在网络选项卡中,但不会显示响应头或流数据。当我终止Spring后端时,Firef
我有一个后端服务器,它将事件作为服务器发送的事件发送给客户端。我还没有找到一个好的库来在Android上处理这项技术,所以我一直在使用一种回退方法,定期检查服务器(通过访问事件endpoint)中的新事件。 后台服务每10秒执行一次。不用说,这不是最好的方法。如果没有任何开源库可用于此场景,那么在内存使用和电池消耗方面,定期检查服务器后端是否有新事件的最佳方法是什么?与在Android中管理开放式