Ich verwende Ratchett, um Sockets auf meinem Webserver mit PHP zu erstellen.Umgang mit Sockets in PHP
Zur Zeit habe ich A - der Server, B - eine Vorrichtung für eine Änderung in einer Datenbank suchen (in A) und C - ein Gerät die Änderung auf der Datenbank zu machen (in A) mit einer curl
Anfrage. Derzeit
wenn C die Änderung macht speichere ich die Änderung in der Datenbank auf A. Mittel, während B wird jede Sekunde mit A durch eine Buchse Prüfen, ob ein Artikel in der Datenbank, indem eine Anfrage an Senden einer in denen A eine Antwort zurückgibt. Dies ist eine Taille von B s Ressourcen. Ich brauche einen Weg für, wenn C eine Änderung für den zu aktualisierenden Sockel macht B.
Dies ist der Code für die Steckdose:
<?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();
}
}
Wo getNotifications()
die Änderung in der Datenbank erhält und deleteNotification()
löscht sie.
Ideen:
- Ich habe darüber nachgedacht, das
$client
Objekt in einer Datenbank zu speichern, so dass, wenn C die Änderung macht es$client->send()
verwenden kann, aber ich glaube nicht, ist das möglich? - Ich könnte eine
while(true)
Schleife mit dem$query = getNotifications($msg);
Code innerhalb haben - schrecklich für A.
Haben Sie noch andere Ideen? Oder Möglichkeiten, das oben genannte zu implementieren.
Vielen Dank! Haben Sie bessere Beispiele für die Verwendung von Wamp? Ich verstehe DOCs nicht in Bezug auf meine Frage. – maxisme