Answer the question
In order to leave comments, you need to log in
How to differentiate clients on websocket server in nodejs?
I'm trying to write a chat on websockets.
On the server, the code is:
const WebSocket = require('ws');
const server = new WebSocket.Server({port: 3001});
const activeClients = [];
server.on('connection', ws => {
activeClients.push(ws);
ws.on('close', data => {
//Что мы тут полчаем? data = 1006
});
ws.on('message', message => {
//Как отправить сообщение конкретному пользователю?
});
});
const WebSocket = require('ws');
const server = new WebSocket.Server({port: 3001});
const activeClients = [];
function generateUniqueID() {
//return some random string
}
server.on('connection', ws => {
ws.uniqueID = generateUniqueID();//Костыль: Добавляем собственный ID
activeClients.push(ws);
ws.on('close', data => {
//Костыль: знаем что кто-то отсоединился, проходимся по массиву клиентов и смотрим, у кого статус "отключен"
activeClients.forEach(client, i => {
if (client.readyState !== WebSocket.CLOSE) {
activeClients.splice(i, 1);
}
});
});
ws.on('message', message => {
//Костыль: получаем из message ID пользователя, которому нужно отправлить сообщение (toUserID) и отправляем ему, перебрав весь массив
const data = JSON.parse(message);
activeClients.forEach(client, i => {
if (client.readyState === WebSocket.OPEN && client.uniqueID === data.toUserID) {
client.send(...)//Сообщение конкретному пользователю.
}
});
});
});
Answer the question
In order to leave comments, you need to log in
Well, uh ... you need to turn to the materiel. A clear case study is here ->
I don't see a problem with storing connections under unique identifiers.
Only I use https://www.npmjs.com/package/uuid
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question