テックブログWizは、最新のIoTやICTサービスをお客様に届ける「ITの総合商社」です。バックエンドまず、WebSocketとは?WebSocketを導入するために早速Ratchetを導入!ComposerでRatchetをインストールWebSocketサーバを作るまとめこんにちは。バックエンドエンジニアの米山です。今回開発案件で、WebSocketを使ったシステム開発に携わることになったので、導入時のメモや困ったことetc...を書いていこうと思います。WebSocketとは?Socketを使った技術は、古くからJavaなどの世界で存在していましたが、WebSocketはこれをインターネット上で可能にしたものです。従来のWeb通信は「1回のリクエスト」に「1回のレスポンス」で処理を行なっていました。キャッチボールをイメージしてもらえたら良いと思います。【WebSocketによる通信】これがWebSocketになると「双方向通信」となり、ソケットが開いている間は任意のタイミングでクライアント<-->サーバ間通信が行えます。WebSocketを導入するために今回実施した開発案件では、以下の環境・条件で構成を考えました。サーバ側の開発言語はPHP(Laravel)であることフロントエンド側にサーバ側の言語仕様を押し付けないことPHP(Laravel)の設計思想や概念に依存するコードをフロント側に強要しない。フロントはフロントで技術選定できる環境にする。サードパーティ製のツール(firebase等)を使わず、リアルタイム性を実現できること以上のことから、今回は「Ratchet」というライブラリを選択しました。LaravelでWebSocketを構築しようとすると、必ずと言っていいほど「Laravel-Echo」が検索ヒットします。上記に挙げた条件の通り、フロントエンドはフロントエンドで技術選定を行いコーディングするので、依存しないRatchetを選びました。Ratchetを導入!では、LaravelプロジェクトにRatchetを導入してみましょう。LaravelではComposerを使ったライブラリ管理が可能ですが、Ratchetの公式ページに導入方法が記載されています。cboden/ratchetでも良いです。(執筆時点でのVer.はv0.4.3を使用しています)WebSocketサーバを作るWebサーバ内で別のサーバが動くイメージで実装します。Webサーバ(apache)内でアプリサーバ(tomcat)が動く感覚に近いです。Java使いはイメージしやすいかも。(厳密には異なる概念です。'vendor/autoload.php'」したり色々やっています。これを自作artisanコマンド等で、自動実行できるようにするとこの記述は不要になります。Laravel上で動くようになるからですね。コードを見ておや?と思った方がいるかもしれません。WebSocketはHTTP技術を拡張したものなので、HttpServerクラスでListenを行います。interfacesで拾うことができます。従って、その引数に渡しているWsServerインスタンスやChatインスタンスも同様です。Chatクラスの中身は、公式ページにも記載がある通りMessageComponentInterfaceを実装する形にします。これを実装することでWebSocketの各イベントが使用可能になります。今回、私が実装したのは以下の4つです。クライアントのsend()時に発火するイベント。クライアントにメッセージを返すところまでここで実装する。WebSocket通信中に何らかのエラーが発生した時に発火するイベントまとめLaravelでRatchetを扱う時はComposerでライブラリをインストールListenするWebSocketサーバ(クラス)を作る各イベントを理解するをわかっていれば実装できると思います。資料は少なめですが、Ratchet関連の解説記事もそこそこあるので、調べたらいくつか出てきます。良きSocketライフを!(笑)Wizではエンジニアを募集しております。興味のある方、ぜひご覧下さい。(1)リンク利用規約/免責事項このサイトでは、利用状況の把握や広告配信などのために、Cookieなどを使用してアクセスデータを取得・利用しています。これ以降ページを遷移した場合、Cookieなどの設定や使用に同意したことになります。はてなブログをはじめよう!wiz012さんは、はてなブログを使っています。ブログを報告する引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。