3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

JSのWebsocket Wsライブラリで全クライアントではなく、個別の人を指定して送信する方法

Posted at

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関数を使って、特定のクライアントにメッセージを送信することもできます。

3
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?