ikarus / sps
v0.8.32
2024-09-11 19:11 UTC
Requires
- php: >=7.2
- ext-pcntl: *
- ext-posix: *
- ext-sockets: *
- tasoft/event-manager: ^1.0
- tasoft/process: ^1.0
- tasoft/value-injector: ^1.0
Requires (Dev)
- phpunit/phpunit: ^6|^9
- dev-master
- v0.8.32
- v0.8.31
- v0.8.30
- v0.8.25
- v0.8.24
- v0.8.23
- v0.8.22
- v0.8.21
- v0.8.20
- v0.8.19
- v0.8.18
- v0.8.17
- v0.8.16
- v0.8.15
- v0.8.14
- v0.8.13
- v0.8.12
- v0.8.11
- v0.8.10
- v0.8.6
- v0.8.5
- v0.8.4
- v0.8.3
- v0.8.2
- v0.8.1
- v0.8.1-alpha
- v0.8.0-alpha
- v0.6.2
- v0.6.1
- v0.6.0
- v0.4.0
- v0.3.7
- v0.3.6
- v0.3.5
- v0.3.0
- v0.2.1
- v0.1.1
- v0.1.0
This package is auto-updated.
Last update: 2024-09-11 19:11:33 UTC
README
Ikarus SPS 是尝试在设备上独立运行 PHP 作为 SPS 的一种尝试。
安装
此存储库是一个可以使用 composer 安装的包。
$ composer require ikarus/sps
Ikarus SPS 的工作原理
Ikarus SPS 引擎区分两种运行模式
- 基于周期的引擎
此引擎类型定义了一个固定频率,例如 2Hz,这意味着引擎每秒更新两次。 - 基于事件的引擎
基于事件的引擎等待其中一个插件触发事件。
因此,取决于您的需求,您更喜欢哪种类型的 SPS 引擎。
一般工作流程
- 通常在设备上运行一个 SPS 引擎实例。
- 基于事件的:此实例需要两种类型的插件:监听器和触发器。
或基于周期的:实例只需要周期插件。 - 监听器等待 SPS 中发生某些事情,然后执行操作。(SPS 到设备)
示例:定时器事件被触发,监听器现在指示电机关闭门。 - 触发器等待设备上发生某些事情,然后通知 SPS。(设备到 SPS)
示例:输入传感器通知门已关闭或定时器触发时间已到。 - 运行引擎,现在插件变得活跃,SPS 开始运行。
多进程
PHP 有一个扩展允许进程分叉。
此功能用于多任务处理 SPS 引擎。
所有触发插件都调度到单独的进程。现在它们可以等待设备的事件,而 SPS 引擎及其监听器继续工作。
SPS 触发插件
如上所述,触发插件在单独的进程中运行,以避免由于监听器(例如:监听套接字会阻塞线程直到可以从套接字中读取数据)而阻塞 SPS 引擎。
但这有一个缺点
- SPS 触发器不与 SPS 引擎及其监听器共享相同的内存。
这意味着
- SPS 触发器在引擎启动时获得环境的副本。
之后,它所做的所有操作(读取对象属性、定义变量等)都不会再影响 SPS 引擎(反之亦然!)
为了解决这个问题,Ikarus SPS 包具有可调度的事件,这些事件可以从 SPS 触发器之间传输。