apisearch-io / react-socket-middleware-finite-server
Requires
- php: >=5.3.0
- react/socket: ^0.8.0
Requires (Dev)
- phpunit/phpunit: ^6.4
This package is not auto-updated.
Last update: 2023-11-08 05:19:15 UTC
README
这是我们为ReactPHP Socket项目创建的中间件软件包。在让这个世界变得更美好的道路上,我们遇到了ReactPHP。我们的生活彻底改变了。我们发现ReactPHP可以使您的项目成为一个极快的服务。
因此,为了帮助他们一点,我们在其中添加了一些由我们团队创建的中间件类。您可以在他们的 网站上 找到更多关于ReactPHP项目的信息。
安装
您可以通过composer安装此软件包。
composer apisearch-io/react-socket-middleware-finite-server
有限服务器
您的服务器应该进行多少次迭代?这可能是一个奇怪的问题,但请记住,在每次服务器迭代之间,使用的内存可能会永远存在。这是您的责任,使这种场景变得罕见,但现实并不总是最完美的。
因此,为了清除所有这些永远存在的内存,我们应该考虑的最佳行动是杀死线程。然后,您应该考虑使用像 Supervisor 这样的线程管理器来确保线程始终被重新创建。
我们引入了FiniteServer,一个n次迭代的服务器。这个服务器的工作方式与其它服务器完全一样。实际上,这是一个简单的包装器,在n次迭代后,服务器将自行关闭。就像一个自我优雅的自杀行为。
这个包装器是通过使用一个名为$iterations的额外参数创建的。
$server = new FiniteServer($socketServer, 1000);
优雅的有限服务器
如果服务器本身想要杀死您的服务器,会发生什么?例如,当缓存更改并希望服务器尽快提供新功能时。在这种情况下,您有几种选择。
-
Supervisor服务重启 - 如果监督器配置相同,那么这似乎是最糟糕的选择。所有进程都将停止并重新启动。如果有任何线程正在服务,它将被杀死,不会提供服务。
-
手动杀死进程。与上一个选项相同,但没有监督器。相同的线程效果。
-
使用Finite Server,并等待线程自动死亡。如果您期望在生产环境中进行实时更改,那么您应该添加一个较低的迭代次数,或者一个较高的生产请求数。都不是有效选项。
使用此实现,新的部署可能如下所示
- 拉取项目
- 清除缓存
- 触摸(文件/)
这个包装器是通过使用一个名为$file的额外参数创建的。
$server = new GracefulFiniteServer($socketServer, '/tmp/socket_xxx.tmp');