服务器发送的事件和 ZF 2.5
Server-sent events and ZF 2.5
我正在使用 ZF2.5 开发应用程序。我需要制作一个 SSE(服务器发送事件)模块,但我无法使用控制器来做到这一点,它不会使我的连接保持活动状态(类型:text/event-stream)。所以我在一个单独的 php 文件中执行此操作,但我需要对此进行身份验证,并且需要从该文件 "outside" Zend 环境访问 Zend 的服务管理器。
可能吗?有什么建议吗?
是的,您可以在 ZF2 中执行此操作,但这并不容易。 SSE 的基础是连接保持打开状态。因此,您需要某种 while(true)
或 php 中的 similar 来保持进程 运行ning.
控制器在函数完成后终止并发送响应。您必须将此逻辑放入控制器中。接下来,响应处理程序缓冲 ZF2 中的所有输出,然后一次发送所有数据。您需要重新编程 ZF2 输出缓冲流程,这样您就可以直接从控制器发送数据而无需缓冲。因为否则,您 while(true)
循环永远不会发送数据,只有当您中断循环时才会发送数据。
所以简短的回答:在 ZF2 中几乎任何事情都是可能的,包括您的需求。但这并不是那么简单。
另一种方法是在独立脚本中加载服务管理器。这也是完全可能的。使用应用程序配置并合并其他配置,您需要构建完整的配置并使用它配置 SM。然后在实例化的时候,就可以充分利用它的系统了。
同样在这里,仅实例化 SM 可能很困难。这里更容易实例化应用程序并从中获取 SM:
$app = Zend\Mvc\Application::init(include 'config/application.config.php');
$sm = $app->getServiceManager();
请注意,您没有“运行()”应用程序,只 bootstrap 它!
我正在使用 ZF2.5 开发应用程序。我需要制作一个 SSE(服务器发送事件)模块,但我无法使用控制器来做到这一点,它不会使我的连接保持活动状态(类型:text/event-stream)。所以我在一个单独的 php 文件中执行此操作,但我需要对此进行身份验证,并且需要从该文件 "outside" Zend 环境访问 Zend 的服务管理器。
可能吗?有什么建议吗?
是的,您可以在 ZF2 中执行此操作,但这并不容易。 SSE 的基础是连接保持打开状态。因此,您需要某种 while(true)
或 php 中的 similar 来保持进程 运行ning.
控制器在函数完成后终止并发送响应。您必须将此逻辑放入控制器中。接下来,响应处理程序缓冲 ZF2 中的所有输出,然后一次发送所有数据。您需要重新编程 ZF2 输出缓冲流程,这样您就可以直接从控制器发送数据而无需缓冲。因为否则,您 while(true)
循环永远不会发送数据,只有当您中断循环时才会发送数据。
所以简短的回答:在 ZF2 中几乎任何事情都是可能的,包括您的需求。但这并不是那么简单。
另一种方法是在独立脚本中加载服务管理器。这也是完全可能的。使用应用程序配置并合并其他配置,您需要构建完整的配置并使用它配置 SM。然后在实例化的时候,就可以充分利用它的系统了。
同样在这里,仅实例化 SM 可能很困难。这里更容易实例化应用程序并从中获取 SM:
$app = Zend\Mvc\Application::init(include 'config/application.config.php');
$sm = $app->getServiceManager();
请注意,您没有“运行()”应用程序,只 bootstrap 它!