前提・実現したいこと
socket.ioを用いて
1対1で自動的にランダムでチャットができるシステムを作りたいと考えております
以下のコードqueueの仕組みを使い、ランダムでチャットを実現しておりますが、
ユーザがdisconnectの時の際はqueueが残ったままになってしまうことが考えられます
disconnectの際はqueueから、socketを削除してしまおうと考えております
別のユーザがconnectしたと同時に
disconnectしたユーザがいたとしたら、不整合が起きてしまうのではないかと考えております。
上記の問題の解決方法を教えていただけたらと思います。
また
ランダムマッチングはキューを使う方法を用いることは一般的なんでしょうか。技術的にお勧めの他の実現方法などあれば教えていただければと思います
const express = require('express'); const app = express(); const http = require('http').Server(app); const io = require('socket.io')(http); var queue = []; /** * キューがなければ追加するだけ、あればキューを削除してマッチングを行う */ var findPeerForLoneSocket = function(socket) { if (queue.length > 0) { var peer= queue.pop(); console.log(peer.id + ' was popped from queue\n'); log(queue); var room = socket.id + '#' + peer.id; peer.join(room); socket.join(room); console.log(socket.id + ' and ' + peer.id + ' joined room ' + room); peer.emit('chat start', {'name': socket.id, 'room':room}); socket.emit('chat start', {'name': peer.id, 'room':room}); } else { queue.push(socket); console.log(socket.id + ' was pushed to queue\n'); log(queue); } }; io.on('connection', function (socket) { console.log(socket.id + ' connected'); findPeerForLoneSocket(socket); }); http.listen(3000, function(){ console.log('express + socket.io server listening on *:3000'); });
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。