Я использую Ratchett для создания сокетов на моем веб-сервере с PHP.Как обрабатывать сокеты в PHP
В настоящее время у меня есть - сервер, B - устройство ищет изменения в базе данных (в ) и C - это устройство делает изменения в базе данных (в ) с запросом curl
.
В настоящее время, когда C делает изменение, которое я сохранить изменения в базе данных по . Среднее время как В проверяют каждую секунду с через сокет, существует ли элемент в базе данных, отправив запрос на , в котором возвращает ответ. Это талия B s ресурсы. Мне нужен способ, когда C делает изменение для сокета для обновления B.
Это код для сокета:
<?php
namespace Notify;
use Ratchet\MessageComponentInterface;
use Ratchet\ConnectionInterface;
require "/NAS/notify/db.php";
class Note implements MessageComponentInterface {
protected $clients;
public function __construct() {
$this->clients = new \SplObjectStorage;
}
public function onOpen(ConnectionInterface $conn) {
$this->clients->attach($conn);
}
public function onMessage(ConnectionInterface $from, $msg) {
$stack = array();
foreach ($this->clients as $client) {
if ($from === $client) { //current client only
$query = getNotifications($msg);
if($query){
while($row = mysqli_fetch_assoc($query)){
array_push($stack, $row);
deleteNotification($row['id'], $msg);
}
$client->send(json_encode($stack));
}
}
}
}
public function onClose(ConnectionInterface $conn) {
$this->clients->detach($conn);
}
public function onError(ConnectionInterface $conn, \Exception $e) {
$conn->close();
}
}
Где getNotifications()
получает изменения в базе данных и deleteNotification()
удаляет его.
Идея:
- Я думал о хранении
$client
объекта в базе данных, так что, когда C делает изменения можно использовать$client->send()
, но я не думаю, что это возможно? - Я мог бы иметь петлю
while(true)
с кодом$query = getNotifications($msg);
внутри - awful для A.
Есть ли у вас какие-либо другие идеи? Или способы реализации вышеизложенного.
Спасибо! Есть ли у вас лучшие примеры использования wamp? Я не понимаю там DOC по отношению к моему вопросу. – maxisme