2つの関連する質問があります。それらを一緒に掲示する方が理にかなっています。socket.ioを使用してConnected Clientsのリストを作成する
質問1
私はすべてのクライアントに出イベントを発するNode.jsのアプリを持っており、現在のすべてのクライアントがready
EMITで応答します。どのようにして初期発光に応答したすべてのクライアントのリストを作成できますか?また、どのような識別情報を使用してクライアントを区別することができますか?
Question2:
私は後に接続しているクライアントのリストを集めるんしようとしていますどのような、そして行のN
数のMySQLデータベーステーブルにアクセスし、各クライアントにX
行ごとに割り当てることです。これらの行はそれぞれのクライアントに送信されます。これはどうすればできますか? Qnの1
現在のコード
ノードコード
setInterval(function() {
util.log('Checking for new jobs...');
dbCheckQueue(function(results) { // checks if there are new rows to "distribute" to clients
if (results.length) {
util.log(results.length + ' new jobs found.');
io.sockets.emit('job_available');
}
});
}, 10*1000);
クライアントサイドJSコード
socket.on('job_available', function() {
console.log('Job Available.. Responding with Ready!');
socket.emit('ready');
});
io.sockets.on('connection', function(socket) {
socket.on('ready', function() {
// UPDATE N rows with client_id in column checkout.
// Then SELECTS * from table where checkout = client_id
getListings(client_id, function(listings) {
socket.emit('job', listings); // send jobs
});
});
});
Qnの2ための現在のコード このコードは単一のクライアントで動作しますが、接続されたすべてのクライアントをループして、同じ列の更新と行の選択を実行するにはどうすればよいですか?
io.sockets.on('connection', function(socket) {
socket.on('ready', function() {
// UPDATE N rows with client_id in column checkout.
// Then SELECTS * from table where checkout = client_id
getListings(client_id, function(listings) {
socket.emit('job', listings); // send jobs
});
});
});
私は賢い解決策を適用していますが、私はスクリーン上に最初にログインしたユーザー。 – johannesMatevosyan
'getListings'呼び出しは、元の質問から引き出したサンプルコードです。それが何を含んでいるのか、それがどのように実装されているのか分かりません。 – rossipedia
私はクライアントを配列に格納しているので、 'foreach'または' for'ループのheplでそれらを取得しようとすると、私はブラウザで最初にログインしたクライアントのユーザ名だけを取得します。 – johannesMatevosyan