こんにちは、バックエンドエンジニアの米山です。
前回、WebSocketの導入・構築について書きました。
その中で、
onMessage() : クライアントのsend()時に発火するイベント。クライアントにメッセージを返すところまでここで実装する。
と書きました。
これで気づいた方がいたかもしれませんが、onMessage()はクライアントからの送信で発火するイベントであり、サーバから発火できるものではない、ということです。
「えー矛盾してるじゃん!?WebSocketはお互い任意のタイミングでやりとりできるんじゃないの?」
という声が聞こえて来そうです。
この辺りは私もまだ学習中の身でして、Google先生曰く「redisを使おう!」とか「ブロードキャストイベントが〜」
などのご教示を頂くことが多いのですが、私は「1クライアントとしてサーバ上でWebSocket接続する」という道を選択しました。
前回の記事の通りに構築すると、PHP(apache)が稼働しているポート(80)とは別にWebSocketサーバを立ててListenすることになります(8282)
ですので、PHPから8282ポートに向けて接続してやろう、という考え方です。
WebSocketクライアントソフトのインストール
方向性を決めたところで色々探していたら、先輩からこちらを紹介いただきました。
Textalk
https://github.com/Textalk/websocket-php
composer textalk/websocket
でインストール可能です。
PHPでWebSocket接続!
GitHubの例にあるように
$client = new WebSocket\Client("ws://localhost:8282/"); $client->text("Hello WebSocket.org!"); echo $client->receive(); $client->close();
WebSocketクラスをnewするタイミングでWebSocketのURLを渡してあげます。
前回構築した環境では、PHPを動かす環境とは別にサーバを立ててますので「ws://localhost:8282」とします。
将来的に、WebSocketサーバを独立して立てる場合のことを考えても、PHPからクライアント接続できることはメリットだと考えます。
おわりに
いかがだったでしょうか?
PHP(サーバ)を1クライアントとしてWebSocket接続する方法を紹介しました。
他に追加のミドルウェア(redisやfirebase等)を入れずに、シンプルな考え方で接続できるので、私はスッキリしました。
今後時間があれば、これらのミドルウェアの知見を伸ばしつつWebSocketを構成してみたいですね。
今回はここまでです。ありがとうございました。
Wizではエンジニアを募集しております。
興味のある方、ぜひご覧下さい。