質問: pc向けのweb、SP向けのアプリにそれぞれwebsocket接続するアプリを作っています。 環境 --- socket.io用サーバー(websocketで利用) apiサーバー(redisを利用してsocket.ioサーバーと接続している) フロント(socket.io-client) やりたいこと ------- ログインユーザーにメッセージがあったときに、pc,sp双方に対してemitしたい 現状やっている方法 ---------- * 「自分一人しか参加していないroom」を作成 * そのユーザーに対してのメッセージがあったときに、上記roomに対してemit といったことをしています 困ったこと ------ 原因が特定できていないのですが、websocketのコネクションは繋がっているのに、roomから離脱してしまうということがあります。 そこで、 * 定期的にroomへの参加をチェック * 参加していない場合は参加させる という処理をしようかと考えています。 (独自のping-pongを作成し、client側でroomに対しての参加をチェックしようかと考えました) 上記のような実装方針で考えているのですが、リクエスト数も無駄に増えるだろうし、ping-pongを独自で実装するのもあまりイケていないように感じます。 実装方針でもなんでもよいのですが、どのようにするのがベストプラクティスなのでしょうか??
回答: > > 原因が特定できていないのですが、websocketのコネクションは繋がっているのに、roomから離脱してしまうということがあります。 > > > 対象のクライアントと接続は確立された状態のままだけど、そのクライアントがroomから予期せぬタイミングで離脱してしまうことがあるという意味ですか? 勝手に離脱が起きる原因は不明ですけど、プライベートメッセージを送るのであれば、そのクライアントのソケットIDにメッセージをemitする方法もあるので、そちらを代わりに試してみてはいかがでしょうか? emit-cheatsheet ================ ``` // sending to individual socketid (private message) socket.to().emit('hey', 'I just met you'); ```