とあるAPIサービスのクライアントサンプルがtextalk/websocketで書かれていたのですが、
なんかメモリリーク起こしているようで、立ち上げっぱなしにしてると落ちるため、
ratchet/pawlを使って書き直しました。
composerでratchet/pawlをインストール
composer require ratchet/pawl
コード
client.php
<?php
require __DIR__ . '/vendor/autoload.php';
/**
* 接続
*/
function connectServer($connector, $loop) {
// 接続先情報(適宜変更)
$url = "ws://localhost:8080";
$connector($url)->then(function(Ratchet\Client\WebSocket $conn) use ($connector, $loop) {
// メッセージ受信イベント
$conn->on("message", function(\Ratchet\RFC6455\Messaging\MessageInterface $msg) {
// メッセージ受け取ったときの処理(適宜変更)
print_r($msg);
});
// 切断イベント
$conn->on("close", function($code = null, $reason = null) use ($connector, $loop) {
$loop->addTimer(1, function() use ($connector, $loop) {
// 切断されたら自動で再接続させる
connectServer($connector, $loop);
});
});
// 接続できたらテストでサーバへメッセージ送ってみる (適宜変更)
sendMessage($conn, "hello world.");
}, function (\Exception $e) use ($loop) {
// 例外処理(処理停止)
$loop->stop();
});
}
/**
* メッセージ送信
*/
function sendMessage($conn, $msg) {
$conn->send($msg);
}
/**
* 本体
*/
$loop = React\EventLoop\Factory::create();
$connector = new Ratchet\Client\Connector($loop);
connectServer($connector, $loop);
$loop->run();