Я создаю многопоточное приложение, которое должно использовать только 1 соединение MySQL (не каждое для каждого потока), и я использую IPC
между потоками, используя ReactZMQ
.
Я пытаюсь передать ссылку MySQLi на событие сообщения, но, похоже, оно находится в другой области.
$GLOBALS['mysqli'] = null;
class Updating extends Thread
{
private $thread_id;
private $increment_updated = 0;
private $increment_good = 0;
private $increment_bad = 0;
private $increment_empty_buffer = 0;
public function __construct(int $thread_id)
{
$this->thread_id = $thread_id;
}
public function run()
{
$GLOBALS['mysqli'] = mysqli_connect(SQLHOST,SQLUSER,SQLPASS,SQLDB);
require 'vendor/autoload.php';
$loop = React\EventLoop\Factory::create();
$context = new React\ZMQ\Context($loop);
$pull = $context->getSocket(ZMQ::SOCKET_PULL);
$pull->bind('ipc://127.0.0.1:5577');
$pull->on('error', function ($e) {
var_dump($e->getMessage());
});
$pull->on('message', function ($data) {
echo "Received: $data\n";
var_dump($GLOBALS['mysqli']); // return null
....
$loop->run();
}
}
В результате я получаю null
, что означает, что $GLOBALS['mysqli']
находится в другой области видимости. Мне нужно получить ссылку и выполнить запрос.