Wiz テックブログ

Wizは、最新のIoTやICTサービスをお客様に届ける「ITの総合商社」です。

PHP(サーバ)上からWebSocketにアクセスする

https://koenig-media.raywenderlich.com/uploads/2020/08/Screenshot_2020-08-10_at_15.08.19.png

こんにちは、バックエンドエンジニアの米山です。

前回、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ではエンジニアを募集しております。

興味のある方、ぜひご覧下さい。

careers.012grp.co.jp