redis久しぶりの更新。Redisでチャット作ろうとして挫折してました。orz作ったものgithubに置いておきました。GitHub動かし方cloneして、redis起動して、依存モジュールをインストールすれば動きます。アクセスするとチャットできます。ときはデフォルトでレイアウト機能をサポートしてたのにexpress3になってから削除されたみたい。モジュールを入れて解決しました。GitHubsocket.ioチャットといえばリアルタイム。そんなことから使ってみたけど難しかった。基本はonでイベントを購読して、emitでイベントを発火させるっていうよくあるオブザーバパターンだけれど、socket.ioの仕様は奥深い。apps.Redisもともとnode.jsとredisの相性はいいのはわかってましたが、socket.ioとの相性も良かったんですね。Redisで保持しているセッションデータをsocket.ioのコネクションでも参照できるのは助かりました。Redisチャットの設計どんなチャットを作るかをまず決めないといけませんでした。研修の時にチャット作ったので、それをリファクタしつつ書くことにしました。チャットの流れは以下の通りです。戻るパスワード認証はないので、ログアウトは実質名前を変えたい時に使うくらいです。Redisのキー設計KVSのキー設計って未だに慣れません。RDMSに親しんでいたら発想の転換が必要ですね。global:room:id文字列型。値はインクリメントされる数値。部屋名のハッシュを作る時に利用します。ハッシュを作る時にこのglobal:room:idを含めることで部屋名の重複が合ったとしても一意の部屋を作ることができます。値はroomId:roomNameという形式。roomIdはglobal:room:idと入力された部屋名をmd5でハッシュした文字列になります。これでどんなに長い部屋名を入力しても32文字に丸められます。roomNameは入力された部屋名になります。room:nameハッシュ型。roomNameroomsは部屋のリストを管理しているため、値にroomIdとroomNameが混在してます。こちらのroom:nameはroomNameを管理しているハッシュなので、roomIdがわかれば日本語の部屋名を取得出来ます。room:roomId:messageリスト型。部屋の中で発言されたメッセージを管理します。キーのroomIdの部分にはハッシュ化された部屋IDが入ります。"room:647df86355c1d46b4db50011875fe82e:message"おわりに一通り書いてみて、全体のアーキテクチャ設計をもっとうまく出来るようになりたいと思いました。RESTのことをよく知らないのでオライリー本でも買ってみます。チャットの大枠ができたのでこれをBackbone.jsで書き直したいところです。その前に、息抜きでGrunt.jsとかやりたいですね。(1)月別アーカイブスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。