PHP并发与命令行编程全解析
1. 数据序列化与并发任务注意事项
在将数据从父应用程序发送到后台工作进程时,数据会被序列化。但有些用户自定义对象在PHP进行序列化和反序列化时可能会出错,甚至一些核心对象(如流上下文)也不支持序列化,不能传递到子线程或进程中。所以,选择在后台运行的任务时,要确保发送的数据与序列化和并行操作兼容。
2. 线程间消息的发送与接收
2.1 问题描述
当需要与多个运行中的线程进行通信,以同步状态或管理这些线程执行的任务时,该如何实现呢?
2.2 解决方案
可以在主应用程序和它所协调的独立线程之间使用消息队列或总线,实现无缝通信。这里以RabbitMQ为例,介绍具体的实现步骤:
2.2.1 后台任务脚本(worker.php)
use PhpAmqpLib\Connection\AMQPStreamConnection;
$connection = new AMQPStreamConnection('127.0.0.1', 5762, 'guest', 'guest');
$channel = $connection->channel();
$channel->queue_declare('default', false, false, false, false);
echo '... Waiting for messages. To exit press CTRL+C' . PHP_EOL;
$callback = function($msg) {