Можно ли читать пакеты udp (асинхронно) и записывать их в базу данных, используя ReactPHP и клиент базы данных Async MySQL для ReactPHP?
Я пытаюсь что-то, но мой код возвращает эти ошибки:
PHP Notice: Undefined variable: logNumber in /var/www/html/reactphp/test_react.php on line 23
PHP Notice: Undefined variable: server in /var/www/html/reactphp/test_react.php on line 30
Я хочу принимать подключения от многих устройств (асинхронно) к заданному порту и ip и записывать данные, которые они отправляют мне в базу данных.
Есть ли лучший способ, чем ReaktPHP?
Я пытаюсь что-то вроде этого:
<?php
use React\MySQL\ConnectionInterface;
use React\MySQL\Factory;
use React\MySQL\QueryResult;
require_once __DIR__.'/vendor/autoload.php';
require_once 'socket_function.php';
$loop = React\EventLoop\Factory::create();
$factory = new React\Datagram\Factory($loop);
$factory->createServer('192.168.1.101:12345')->then(function (React\Datagram\Socket $server) {
$server->on('message', function($buf, $address, $server) {
echo 'client ' . $address . ': ' . $buf . PHP_EOL;
$devId = ascii_decimal($buf, 0, 1);
$logNumber = ascii_decimal($buf, 12, 15);
$dbloop = React\EventLoop\Factory::create();
$dbfactory = new Factory($dbloop);
$uri = 'user:pass@localhost/dbname';
$query = "SELECT * FROM devicesregistrator WHERE devid ='".$devId."' ORDER BY id ASC LIMIT 1";
$dbfactory->createConnection($uri)->then(function (ConnectionInterface $connection) use ($query) {
$connection->query($query)->then(function (QueryResult $result) {
if (isset($result->resultRows[0]) and $result->resultRows[0] !== NULL ) {
$device = $result->resultRows[0]['devid'];
$logscheck = $result->resultRows[0]['logscheck'];
if(isset($device) and $device !== NULL and $logNumber > $logscheck+1){
$myLogNumber = (int)$logscheck+1;
$command = decimal_ascii(83, $device, 0, $myLogNumber);
}
else{
$command = decimal_ascii(84, $device, 0, time());
}
$server->send($command);
}
}, function (Exception $error) {
echo 'Error: ' . $error->getMessage() . PHP_EOL;
});
$connection->quit();
}, 'printf');
$dbloop->run();
});
});
$loop->run();
?>