質問: LINEのようなチャットアプリをhtml5ハイブリッドアプリで作成中です(Monacaを使ってます)。 node.jsとsocket.ioとredisを利用する予定です。 Googleなどで「socket.io チャット」と検索すると、いろんなサイトでチャットとして動作するコードが書かれていますが、それらは全て「入力した内容がリアルタイム通信している相手に直接送信されるもの」となっています。 私がやりたいのは「送信側は入力した内容をredisに保存する→受取側はredisの中に自分のユーザーIDで保存されているデータがあればポップして、ポップしたデータはredisから削除」というものです。 つまり「送信側と受取側がsocket.ioによってリアルタイム通信されている」のではなく、「受取側がredisとリアルタイム通信されている」というプログラムになると思います。 ここまで書きましたが、今までPHPしかしておらず、node.jsに関して初心者なので質問したい事があります。 1. このやり方は可能でしょうか?可能なら、参考になるサイトなども紹介して頂きたいです。 2. これより一般的なやり方はあるのでしょうか?
回答: MonacaとSocket.ioを使った事がないので可能であるかはわかりませんが、実装方法を自分なりに考えました。もし参考になればと思います。 まず、クライアント1が未接続時に他のクライアント2からメッセージがあった場合は、redisの未読スタックorキューにメッセージを保存します。 そして次回クライアント2がSocketに接続したときにredisに未読メッセージがあればそれをクライアント2に送信し削除します。Socketとの接続確立以前にメッセージを確認したければ、クライアント2側からサーバーに未読確認のリクエストを送り、restで未読メッセージを受信します。 もしクライアント1,2がオンラインであればredisには保存せずにメッセージをブロードキャストします。