実現したいこと
node.js初心者です。
node.js+express+socket.ioを用いてチャットを作りたいです。
利用者が話題別に部屋を作れるようなものをイメージしています。
質問
お聞きしたいことは、2点1点あります。
######①socket.ioのnamespaceの使い方(自己解決!)
expressのルータのように、
io.of("/socket/:roomid").on("connection", function(){ //処理 }
のような形で切り分けができればスマートで良いかなと思ったのですが、
調べたところsocket.ioにルートパラメータを受け取る機能は見つけられませんでした。
どのようにすれば同等の処理が出来ますか?
あるいは、roomで切り分けるべきですか?
######②socket.ioの処理をwwwファイルに書くことの是非
expressのテンプレートを使用したときは、
wwwファイルにsocket.ioの処理を書かねばならないようなのですが、
わからないながらに、wwwファイルを書き換えるという行為に違和感があります。
現在、少しでもスマートにするために、処理を別のファイルに記述しています。
www
1/** 2 * Create HTTP server. 3 */ 4 5var server = http.createServer(app); 6var io = require('socket.io')(server); 7 8var mySocket = require("../mySocket") 9var ms = new mySocket(io) 10ms.listen()
mySocket
1var mySocket = function(io){ 2 this.io = io 3} 4 5mySocket.prototype.listen = function(){ 6 this.io.connection(function(socket){ 7 //処理 8 }) 9} 10 11module.exports = mySocket
ところがこれも、ioオブジェクトを渡すのはなんか違うんじゃないか?と感じています。(感覚ですが…)
もっと良い方法がありますか?
wwwファイルを弄らないで済むのが最も良いという考えですが、それがあっているのかどうかも含めてです。
質問背景
(筆者の浅学ゆえ、とんちんかんなことを言っているかもしれません。)
namespaceを動的に生成する方法があることは実のところ調べました。
しかし、wwwファイルでsocket.ioオブジェクトを管理している現状、例えば利用者が新しいルームを作成する時に、ルータの処理でsocket.ioオブジェクトにアクセスし、namespaceを生成できるのだろうか?という疑問に当たりました。
データベースにルームの情報を保存し、socket.io側で定期的に取得しに行く…などとすれば出来るのかもしれませんが、それはあまりスマートではない気がしています。
もっと良いやり方を使えばスマートに実現できるのではないか、と考え、このような質問形式とさせていただきました。
このあたりの疑問を解決してくだされば、更に嬉しいです。
###追記
①について、自己解決しました。
ドキュメントを読み直したところ、namespaceを正規表現で受け取れることがわかりました。
https://socket.io/docs/server-api/#server-of-nsp
②についてはっきりさせたいので、引き続き回答お待ちしています。
補足情報
node.js 10.16.3
socket.io 2.3.0
express 4.16.1
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。