質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.50%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

Q&A

1回答

2949閲覧

node.js socket.io redisでチャットの入室者一覧機能の仕組みについて

4ete4tfwegtr43

総合スコア13

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

Redis

Redisは、オープンソースのkey-valueデータストアで、NoSQLに分類されます。すべてのデータをメモリ上に保存するため、処理が極めて高速です。

Socket.IO

Socket.IOはNode.js上で動くライブラリであり、すべてのブラウザとモバイルデバイスでリアルタイムのアプリを作動させる事を目的としています。

0グッド

1クリップ

投稿2017/05/16 16:38

node.js socket.io redisでチャットの入室者一覧機能を作っていて分からないところがあります。
後から入室したユーザーは前に入ったユーザーの名前が表示されません。
redisでデータを格納し、その値をとりだして配信するという形で試行錯誤していますがうまくいきません。
あまり情報がないため、質問いたしました。

名前を入力させ、socket.emitでサーバー側に送り、サーバー側でsocket.onで受け取り、
client.setでredisのサーバーに格納しています。
成功するとログにsuccessと表示されるようにしており、ここまではうまくいきます。
その後、client.getでデータベースから値を取り出し、その値をio.sockets.emitで送信します。
そしてクライアント側でうけとた値を一覧に追加していっているのですが、
追加はできますが、やはり後から入室したユーザーは前に入ったユーザーの名前が表示されません。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

tkanda

2017/05/17 05:06

redisにsetしているキーと値はどんな内容ですか?
4ete4tfwegtr43

2017/05/17 06:38

修正依頼ありがとうございます。key:setname 値:入力された名前  です。
guest

回答1

0

client.set('setname', 'Tanaka', callback)

一人目のユーザーが上記を実行したあとで・・・

client.set('setname', 'Yamada', callback)

二人目のユーザーがこのように実行しているということですね。
これだと、一人目の情報(Tanaka)が二人目の情報(Yamada)で上書きされてしまいます。
複数のユーザー名をredisに記憶させたい場合、キー名が重複しないように、例えばデータの記録時刻文字列と組み合わせて・・・

client.set('username:2017-05-17 10:00:00.000', 'Tanaka', callback)
client.set('username:2017-05-17 10:00:30.222', 'Yamada', callback)

このように記録すると良いです。
あとで、ユーザー名を含んだすべてのキーと値を列挙したい場合、以下のようにしてアクセスできます。

JavaSript

1 2client.keys('username:*', function(err, keys) { 3 keys.forEach( key => { console.log( key ); }); 4 client.mget(keys, function(err, values) { 5 values.forEach( value => { console.log(value); }); 6 }); 7}); 8

ご参考になれば。

投稿2017/05/17 07:12

tkanda

総合スコア2425

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

4ete4tfwegtr43

2017/05/17 09:03

ご回答ありがとうございます。こちらはうまくいきました。もう一つ質問したいことがあるのですが、退室した後、入室者一覧から退室したユーザーを消す処理は、退室者のキーを使い削除処理をすればいいのでしょうか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.50%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問