web-dev-qa-db-ja.com

WebSocket接続を確立するために、なぜPusherやSocket.ioなどの製品が必要なのですか?

私は最近、SaaSチャット練習アプリケーションで作業しているときに、WebSocketとLaravel PusherやSocket.ioと同様に)について読んでいます。理解できないことつまり、なぜWebsocket接続を確立するために外部ソフトウェアが必要なのですか?Laravelのようなサーバーコードは、Vue.jsのようなフロントエンドとの接続を直接確立することはできないのですか?プッシャーとSocket.ioのような仲介者を通過するには?noobの質問でごめんね。

17
Simon Suh

それは持っていない

これらのソフトウェアは、たまたまWebsocketプロトコルでの作業を簡単にするものです。

Laravelはopinionatedフレームワークです。これは、独自のライブラリを選択して、これらを抽象化することを意味します内部で何が起こっているかについてそれほど心配する必要がないように、あなたのための概念の種類。

基本的に、WebSocketを使用できるようにするために必要な2つのコンポーネントがあります。

  1. Websocketサーバー
  2. Websocketクライアント

LaravelがWebsocketを使用してフロントエンドと直接通信しない理由は、Laravel自体がWebsocketサーバーではないためです。少なくとも、実際にはそうではありません。そしてPHPはWebsocketプロトコルでの作業をサポートしていますが、 そしてそれをもう少しうまく活用するためのいくつかのライブラリも -それは単に長く処理するために使用されていません-他の言語と同じくらい頻繁に生きるプロセス。

代わりに、Laravelは Redisが提供するPub/Sub機能 を使用して、Redisおよび Predisライブラリ を通じて発生するイベントをリッスンします。理由これが行われる理由は、Laravelが、WebSocketサーバーおよび接続されているすべてのクライアントの仲介者として適しているためです。

このように、Laravelは Broadcasting Events を使用してWebsocketサーバーに情報を渡すだけでなく、Websocketサーバーからイベント情報を受信し、ユーザーがそれらを受け取る能力または許可。

プッシャーを使用したくない場合は、Laravelと呼ばれる Laravel Echo Server ]専用のWebsocketサーバーを実行できるライブラリがあります。

内部では、このライブラリは引き続きSocket.ioとRedisを使用して、すべての可動部分がLaravel Webアプリケーションでシームレスに通信できるようにします。ここでの利点は、サーバーによって送信されるメッセージの数を心配する。

欠点は、サーバーを再起動するたびに、または障害が発生した場合などにWebsocketサーバーがオンになるように、サーバーでこのプロセスを管理および維持する方法を知る必要があることです。

サーバーデーモンの実行と保守の詳細については、 PM2 をご覧ください。

Websocketの処理方法に関するLaravelの意見に同意しない場合は、理論的には他のサーバー側言語を使用してwebsocketプロトコルを処理できます。それはプロトコル自体のより大きな実用的な知識を必要とするだけです。 Laravelで作業する必要がある場合は、それを処理できるように適切なServiceクラスとProviderクラスを作成する方法を知っている必要があります。

27
maiorano84

簡潔な答え?それらを使用する必要はありません。独自のサーバーおよびクライアント側のWebSocket実装を作成するノックアウトします。

より長い答え。

Laravelを使用する理由私はまっすぐなPHPでそれをすべて行うことができます。

Vueを使用する理由私はバニラJavaScriptでそれをすべて行うことができます。

ライブラリとフレームワークを使用する理由は、実装の詳細を抽象化し、製品の構築を容易にするためです。彼らはあなたが考えていないEdgeケースやあなたが知らないことさえ知らないを扱います。なぜならそれらは数千または数百万の開発者とすべての彼らが遭遇して修正した知識とバグは実装に組み込まれています。

これはソフトウェアエンジニアリングの特徴の1つであり、コードの再利用です。自分を繰り返したり、必要のないソフトウェアを書いたりしないでください。これにより、ソリューションを構築する前に、一連のインフラストラクチャの構築に集中するのではなく、特定の要件に対応するソリューションの構築に集中できます。

私はPusherを使用したことがありませんが、はい、それはSaaS製品です。しかし Socket.ioはオープンソースです のようです。

14
Bert