websockets - получить сообщение с сервера websocket и отправить его клиенту - PullRequest
0 голосов
/ 31 мая 2018

Я пытаюсь узнать, как работают веб-сокеты.Я могу получить данные о торговле с сервера веб-сокетов и распечатать их на консоли.Однако я пытаюсь понять, как я могу передать это сообщение на свой сервер веб-сокетов, чтобы я мог отправить его своим клиентам.По сути, я хочу напечатать каждое сообщение в браузере.

"use strict";

const WebSocket = require("ws");

const binanceWS = new WebSocket("wss://stream.binance.com:9443/ws/stratbtc@trade");

binanceWS.on("open", function open() {
    console.log("open action");
});

binanceWS.on("message", function incoming(data) {
    console.log(data);
});

Теперь этот binanceWS будет печатать данные, когда получит их.То, что я пытаюсь сделать, это как я могу передать в send eventlistener моего объекта WebSocket.Server.Как вы можете видеть в примере из https://github.com/websockets/ws сам wss берет объект websocket при наличии соединения.

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('something');
});

Спасибо!

ПРИМЕЧАНИЕ :Структура, о которой я говорю, такова.По сути, у меня будут потребители веб-сокетов для получения торговых данных.И внутри того же хоста (пока что localhost) будет сервер веб-сокетов.Этот сервер веб-сокетов будет отправлять данные на каждый клиент веб-сокетов.

enter image description here

УСПЕХ : Хорошо, я сделал это, определив потребительский веб-сокет (binanceWS) message слушатель при подключении к серверу websocket.Я не уверен, что это хороший способ, хотя

"use strict";

const WebSocket = require("ws");

const binanceWS = new WebSocket("wss://stream.binance.com:9443/ws/stratbtc@trade");

binanceWS.on("open", function open() {
    console.log("open action");
});

const wss = new WebSocket.Server({ port: 8080 });

wss.on('connection', function connection(ws) {
  ws.on('message', function incoming(message) {
    console.log('received: %s', message);
  });

  binanceWS.on("message", function incoming(data) {
      ws.send(data);
  });
});

Ответы [ 2 ]

0 голосов
/ 01 июня 2018

Я добился этого, ведя глобальный список клиентов websocket.И когда инициируется событие сообщения websocket потребителя, он отправляет каждого клиента по списку.

"use strict";

const WebSocket = require("ws");

const binanceWS = new WebSocket("wss://stream.binance.com:9443/ws/eosbtc@trade");

var websocketList = [];

binanceWS.on("open", function open() {
    console.log("open action");
});

binanceWS.on("message", function incoming(data) {
    console.log(data);

    // send data to every websocket client
    websocketList.forEach(ws => {
        ws.send(data);
    });
});

const wss = new WebSocket.Server({ port: 8080 });

wss.on("connection", function connection(ws) {

    // add ws handle to websocket list.
    websocketList.push(ws);

    ws.on("close", function close() {
        console.log("Disconnected");
    });
});
0 голосов
/ 31 мая 2018

одна веб-розетка

//websocket connection event will return a socket you can later use
binanceWS.on("connection", function(socket) {
    socket.on("message", function incoming(data) {
    console.log(data);
    // if you want to send that message back to the client who sent it, 
    // you can use send method on the socket
     socket.send(data)
    });
});

Вложенная веб-розетка

//websocket connection event will return a socket you can later use
binanceWS.on("connection", function(socket) {
    // create another websocket here
    const wss = new WebSocket.Server({ port: 8080 });

    // connect the second websocket
     wss.on("connection", function(ws) {
      // start listening to first websocket incoming messages 
      // if second communication has successully been instantiated 
      socket.on("message", function incoming(data) {
      // send the data using the second websocket
      ws.send(data)
      })
    });
});

Тогда вам нужно иметь этот минимальный код на своем клиенте, и выувидит взаимодействие между сервером и вашим клиентом

клиент

const socket = new WebSocket('server_url'); // Connection opened 
socket.addEventListener('message', function (event) { socket.send('send message'); });

Примечание : поскольку вы будете использовать входящие данные веб-сокетав другой, лучше всего открыть второй веб-сокет, только если первый был успешно открыт

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...