Ответы пользователя по тегу WebSocket
  • Как как отправить данные авторизации в приложение на другом порту на NestJs через websockets?

    Xuxicheta
    @Xuxicheta
    инженер
    И есть клиентское приложение на 3001 порту

    а потом пишете
    @WebSocketGateway(3000, {transports: ['websocket']})


    Так на 3001 или 3000?
    Ответ написан
  • Объясните как работает кросдоменная политика безопасности на примере модуля на Angular?

    Xuxicheta
    @Xuxicheta Куратор тега Angular
    инженер

    встроенные инструмены ангуляра для работы с веб сокетами

    это какие? Если речь про WebSocketSubject, то это таки rxjs, а не Ангуляр, и да, можно юзать, почему нет.
    Ангуляр же про вебсокеты ничего не знает.

    Почему тогда сейчас я могу работать с данным апи из любого другого места средствами ангуляра?

    Ангуляр тут вообще не при делах. Браузер делает запрос. Если запрос идет на другой домен, браузер сначала спрашивает разрешение у этого домена, можно ли ему сделать этот запрос. Посредством другого запроса с методом OPTIONS. Так называемый префлайт.
    Если бэкенд на том домене отдает заголовки в которых указано "ок, можно", то браузер запрашивает данные и все ок.
    Это есть Cross-origin resource sharing, CORS
    Таким образом успешность вашего запроса целиком зависит от бэкенда.
    почитать

    Плюс еще с сайтов на схеме https нельзя делать нешифрованные запросы, можно только https и wss.
    Ответ написан
  • Поясните по сокетам?

    Xuxicheta
    @Xuxicheta
    инженер
    При этом на клиенте то команда получения сообщения от сервера всего 1 это socket.onmessage в итоге у меня ответ от сервера пихается в одну переменную и список подключений и сообщения, а как все это разделить?


    роутинг по типу сообщения же. Типа такого
    socket.onmessage = message => {
      const obj = JSON.parse(message);
      switch (obj.type) {
        case MessateTypes.Online: return onOnline(message.payload);
        case MessateTypes.Messages: return onMessages(message.payload);
        default: throw new Error('unrecognized message');
      }
    }


    Неплохо вообще заюзать стандарт. Например JSON-RPC
    https://habr.com/ru/post/441854/
    Ответ написан
    Комментировать
  • Какой модуль для websocket'ов предпочтительнее - express-ws или ws.js?

    Xuxicheta
    @Xuxicheta
    инженер
    express-ws предлагает нам использовать несколько вебсокет соединений и использовать роутер от экспресса для маршрутизации сообщений приходящих по этим нескольким соединениям.
    ws предполагает что вы создаете один сервер, по нему приходят сообщения и там вы уже их разруливаете.

    По факту разница не так уж велика, просто объявление сокет сервера немного отличается своим видом.
    Оба пакета можно использовать без express.
    express-ws внутри использует ws

    А еще стоит обратить внимание на количество issues у этих пакетов.

    Итого: если у вас несколько разных вебсокет соединений - можете взять express-ws, если одно соединение - в этой обертке смысла нет. Но вообще в целом мало что изменится.
    Ответ написан
    1 комментарий
  • Нужна помощь с вебсокетами?

    Xuxicheta
    @Xuxicheta
    инженер
    Решать проблему нужно с другого конца. Организовать https на vps
    C http на https можно.

    https://letsencrypt.org/ru/getting-started/
    https://losst.ru/kak-poluchit-sertifikat-let-s-encrypt
    https://www.npmjs.com/package/ws#external-https-server

    Поскольку еще происходит обращение с одного домена на другой, надо позаботиться о CORS
    Ответ написан
  • Как изолировать ивент для определенного юзера?

    Xuxicheta
    @Xuxicheta
    инженер
    spoiler
    const EventEmitter = require('events');
    const pubsub = new EventEmitter();
    
    wss.on('connection', ws => {
      pubsub.on('test', (payload, _ws) => {
        if (_ws !== ws) {
          return;
        }
        ws.send(payload);
      });
      ws.on('message', message => {
        const { event, payload } = message;
        pubsub.emit(event, payload, ws);
      });
    })


    const EventEmitter = require('events');
    const pubsub = new EventEmitter();
    
    wss.on('connection', ws => {
      ws.on('message', message => {
        const { event, payload } = message;
        pubsub.emit(event, payload, ws);
      });
    });
    
     pubsub.on('test', (payload, _ws) => {
       _ws.send(payload);
    });


    const EventEmitter = require('events');
    const pubsub = new EventEmitter();
    
    wss.on('connection', ws => {
      ws.on('message', message => {
        const { event, payload } = message;
        pubsub.emit(event, { payload, ws });
      });
    });
    
     pubsub.on('test', ({ payload, ws }) => {
       ws.send(payload);
    });


    const EventEmitter = require('events');
    const pubsub = new EventEmitter();
    
    wss.on('connection', ws => {
      ws.on('message', message => {
        const { event, payload } = message;
        pubsub.emit(event, payload, outcome => ws.send(outcome));
      });
    });
    
     pubsub.on('test', (payload, send) => {
       send(payload);
    });
    Ответ написан
    1 комментарий
  • Веб сокеты в node js?

    Xuxicheta
    @Xuxicheta
    инженер
    Берем гугл, он отправляет нас на вики, где написано следующее
    Socket.IO — JavaScript-библиотека для веб-приложений и обмена данными в реальном времени. Состоит из двух частей: клиентской, которая запускается в браузере и серверной для node.js. Оба компонента имеют похожее API. Подобно node.js, Socket.IO событийно-ориентированная.

    Socket.IO главным образом использует протокол WebSocket, но если нужно, использует другие методы, например Adobe Flash сокеты, JSONP запросы или AJAX запросы[2], предоставляя тот же самый интерфейс. Помимо того, что Socket.IO может быть использована, как оболочка для WebSocket, она содержит много других функций, включая вещание на несколько сокетов, хранение данных, связанных с каждым клиентом, и асинхронный ввод/вывод

    Может быть установлена через npm (node package manager)


    А что такое "прямо внутрь работающего сервера"?
    Приложение на node.js это процесс, который может слушать сетевые соединения, если это ему нужно.
    Может слушать http и websocket, может не слушать. Можно в другом приложении организовать обмен через сокеты, можно в этом же. Как вам будет угодно.
    Ответ написан
    2 комментария