Видя твой вопрос, я думаю, что нет понимания того, как работают Websockets.Я предполагаю, что вы используете https://github.com/websockets/ws
Есть две вещи.Во-первых, это WebSocketerver, который вы назвали server
, а затем индивидуальный сокет, который вы назвали socket
Теперь нужно понять, что сокет недоступен снаружи server.on() callback
Причинаэто может быть 1000 сокетов, подключенных к данному экземпляру, и не было бы способа однозначно идентифицировать конкретный сокет, на который вы хотите отправить сообщение.
Поэтому задайте себе вопрос, что ваше приложение хочет отправить сообщениена отдельный сокет для отправки всем, кто подключен к вашему серверу (в основном, широковещательный)
Если вы хотите отправить отдельному человеку, вам нужно будет однозначно идентифицировать пользователя
this._wss = new WebSocket.Server({
port: ENV_APP_PORT_WS
});
this._wss.on("connection", async (ws: AppWebSocket, req: IncomingMessage) => {
// const ipAddress = req.connection.remoteAddress; // IP Address of User
logger.info(req);
const queryParams = url.parse(req.url, true).query;
let authUser: User;
try {
authUser = await this._authenticateWebSocket(queryParams);
} catch (e) {
// Terminate connection and return...
}
// WS User INIT
ws.isAlive = true;
ws.userId = authUser.id;
ws.uuid = Helpers.generateUUIDV4();
ws.send(JSON.stringify({
type: "connected",
env: ENV
}));
});
Приведенный выше код добавит свойство к каждому объекту сокета, которое позволит ему однозначно идентифицировать конкретного пользователя / сокета.
При отправке =>
onMessageHandler(targetUserId: number, message: string) {
const allSockets = <AppWebSocket[]>Array.from(this._wss.clients.values());
const targetSocket = allSockets.find(w => w.userId === targetUserId);
targetSocket.send(message);
}
Если вы хотите отправить всем подключенным пользователям, это довольно просто: https://github.com/websockets/ws#server-broadcast