WebSocketによるクライアントごとに一意の識別子を割り当てて、その識別子を使って個別のクライアントにメッセージを送信する例を示します。ここでは、クライアントがWebSocketに接続すると、サーバー側でUUIDを生成して、そのUUIDをクライアントに送信しています。クライアントは、サーバーから受け取ったUUIDを使って、そのクライアントにメッセージを送信することができます。
サーバー側のコード(Node.js + wsライブラリを使用する場合):
const WebSocket = require('ws');
const { v4: uuidv4 } = require('uuid');
const wss = new WebSocket.Server({ port: 8080 });
const clients = new Map();
wss.on('connection', (ws) => {
const uuid = uuidv4();
clients.set(uuid, ws);
ws.send(uuid); // クライアントにUUIDを送信する
ws.on('message', (message) => {
// クライアントからのメッセージを受信したときの処理
});
ws.on('close', () => {
clients.delete(uuid);
});
});
// 特定のクライアントにメッセージを送信する関数
function sendToClient(uuid, message) {
const ws = clients.get(uuid);
if (ws) {
ws.send(message);
}
}
クライアント側のコード(JavaScript + WebSocket APIを使用する場合):
const ws = new WebSocket('ws://example.com:8080');
let uuid;
ws.onopen = function() {
// サーバーからUUIDを受信する
ws.onmessage = function(event) {
uuid = event.data;
};
};
function sendMessageToServer(message) {
// サーバーにメッセージを送信する
ws.send(message);
}
function sendMessageToClient(targetUuid, message) {
// 特定のクライアントにメッセージを送信する
ws.send(JSON.stringify({
target: targetUuid,
message: message
}));
}
上記の例では、サーバー側でclientsというMapを使って、UUIDとWebSocketインスタンスを紐づけています。また、sendToClient関数を定義して、UUIDを指定してメッセージを送信することができます。クライアント側では、UUIDを受信した後、sendMessageToServer関数でサーバーにメッセージを送信することができます。また、sendMessageToClient関数を使って、特定のクライアントにメッセージを送信することもできます。