Я не знаю, является ли этот пакетом, который вы используете, но какой бы вы ни использовали, он будет похожим.В файле readme рассматриваются два примера:
Пример сервера
В примере сервера они создают сервер веб-сокетов:
const WebSocket = require('ws');
const wss = new WebSocket.Server({ port: 8080 });
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
console.log('received: %s', message);
});
ws.send('hello from the server!');
});
Это создает прослушиваниесервер сокетов.Он добавляет прослушиватель событий для message
, поэтому, когда клиент подключается к серверу, клиент может отправлять сообщения, и этот обработчик событий запускается.
После этого прослушивателя событий он отправляет строку 'hello from the server!'
.Этот вызов отправки НЕ будет запускать вышеупомянутый обработчик событий, потому что этот вызов отправки происходит на стороне сервера сокета.Он отправляет сообщение для получения на стороне клиента этого сокета.
Пример клиента (обычно в браузере)
const WebSocket = require('ws'); // omit this line if including ws via <script> tag
const ws = new WebSocket('ws://www.host.com/path');
ws.on('open', function open() {
ws.send('hello from the client!');
});
ws.on('message', function incoming(data) {
console.log(data);
});
Это клиентский сценарий, который подключается к серверу сокетов впервый пример.Он подключается, и событие 'connection'
будет вызвано на сервере сокетов выше.Затем сервер сокетов вызывает ws.send('hello from the server!');
, и наш клиентский сценарий устанавливает прослушиватель для 'message'
, поэтому он запускает и выводит 'hello from the server!'
на консоль браузера.
Этот клиентский сценарий также устанавливает 'open'
обработчик событий, который срабатывает после успешного подключения к серверу сокетов.Таким образом, он будет запускать и отправлять 'hello from the client!'
на сервер.Обработчик сервера для 'message'
сработает, и в терминале сервера вы увидите 'hello from the client!'
printout.
В вашем примере вы делаете это с сервера (ваш сервер routs.js на стороне сервера).file)
wss.clients.forEach(function each(client) {
if (client.readyState === WebSocket.OPEN) {
client.send(data);
}
});
То, что вы делаете, - это перебор всех подключенных клиентов, которые успешно подключились к серверу сокетов, и вы отправляете сообщение каждому из них в отдельности.Это все равно будет , а не запускать обработчик событий on
на стороне сервера для 'message'
, который вы установили на каждом сокете при каждом первом подключении.Он будет запускать обработчик на стороне клиента в браузере.
Редактировать на основе вашего последнего комментария выше:
Чтобы делать то, что вы хотите, вы хотите, чтобы что-то подобное было наклиент:
myButton.onClick = function (e) {
ws.send("Hey everyone! I'm Chev!");
};
Затем на сервере в обработчике соединений вы захотите настроить обработчик сообщений следующим образом:
wss.on('connection', function connection(ws) {
ws.on('message', function incoming(message) {
wss.clients.forEach(function each(client) {
if (client !== ws && client.readyState === WebSocket.OPEN) {
client.send(message);
}
});
});
});
Вы можете сделать message
бытьобъект вместо строки, чтобы вы могли выполнять различные действия в зависимости от свойств этого объекта, но для простоты я просто заставил сервер транслировать любое полученное сообщение остальному серверу.
Обратите внимание на оператор ifпроверка того, что мы не передадим сообщение обратно тому же клиенту, который его отправил.