ikarus/sps

v0.8.32 2024-09-11 19:11 UTC

README

Ikarus SPS 是尝试在设备上独立运行 PHP 作为 SPS 的一种尝试。

安装

此存储库是一个可以使用 composer 安装的包。

$ composer require ikarus/sps

Ikarus SPS 的工作原理

Ikarus SPS 引擎区分两种运行模式

  1. 基于周期的引擎
    此引擎类型定义了一个固定频率,例如 2Hz,这意味着引擎每秒更新两次。
  2. 基于事件的引擎
    基于事件的引擎等待其中一个插件触发事件。

因此,取决于您的需求,您更喜欢哪种类型的 SPS 引擎。

一般工作流程

  1. 通常在设备上运行一个 SPS 引擎实例。
  2. 基于事件的:此实例需要两种类型的插件:监听器和触发器。
    或基于周期的:实例只需要周期插件。
  3. 监听器等待 SPS 中发生某些事情,然后执行操作。(SPS 到设备)
    示例:定时器事件被触发,监听器现在指示电机关闭门。
  4. 触发器等待设备上发生某些事情,然后通知 SPS。(设备到 SPS)
    示例:输入传感器通知门已关闭或定时器触发时间已到。
  5. 运行引擎,现在插件变得活跃,SPS 开始运行。

多进程

PHP 有一个扩展允许进程分叉。
此功能用于多任务处理 SPS 引擎。
所有触发插件都调度到单独的进程。现在它们可以等待设备的事件,而 SPS 引擎及其监听器继续工作。

SPS 触发插件

如上所述,触发插件在单独的进程中运行,以避免由于监听器(例如:监听套接字会阻塞线程直到可以从套接字中读取数据)而阻塞 SPS 引擎。

但这有一个缺点

  • SPS 触发器不与 SPS 引擎及其监听器共享相同的内存。

这意味着

  • SPS 触发器在引擎启动时获得环境的副本。
    之后,它所做的所有操作(读取对象属性、定义变量等)都不会再影响 SPS 引擎(反之亦然!)

为了解决这个问题,Ikarus SPS 包具有可调度的事件,这些事件可以从 SPS 触发器之间传输。