Ratchettを使用して、PHPを使用してWebサーバーにソケットを作成しています。PHPでソケットを扱う方法
現在私は持っ - サーバ、B - (で)データベースに変更を探してデバイスとC - Aでデータベースに変更を加える装置()とcurl
リクエストを送信します。
現在が変更された場合、データベースの変更をAに保存します。 Bアイテムがあるか否かをソケットを介してと毎秒をチェックしている間意味するでリターン応答に要求を送信することによって、データベース内にあります。これはBのリソースです。 を更新するために、がソケットを変更するときのための方法が必要です。
これは、ソケットのコードです:
getNotifications()
は、データベースの変更を取得し、deleteNotification()
はそれを削除します <?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();
}
}
。
アイデア:
- 私はCが変更を行うとき、それは
$client->send()
を使用することができますが、私はそれが可能だとは思わないように、データベースに$client
オブジェクトを格納について考えていますか? $query = getNotifications($msg);
コードを内部に持つwhile(true)
ループを持つことができます.- の場合、の場合はひどいです。
他にアイデアはありますか?上記を実装する方法もあります。
ありがとうございました! wampを使用するより良い例はありますか?私は質問に関連してDOCを理解していません。 – maxisme