首页 > 解决方案 > websockets - 从 websocket 服务器获取消息并将其发送到客户端

问题描述

我正在尝试学习 websockets 是如何工作的。我能够从 websocket 服务器获取交易数据并将其打印在控制台上。但是,我试图了解如何将该消息传递到我的 websocket 服务器,以便我可以将它发送到我的 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");
});

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

现在这binanceWS将在收到数据时打印数据。我想做的是如何传递给send我的 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');
});

谢谢!

注意:我正在谈论的结构是这样的。基本上,我会让 websocket 消费者获取交易数据。在同一主机(现在是本地主机)中,将有一个 websocket 服务器。此 websocket 服务器将向每个客户端 websocket 发送数据。

在此处输入图像描述

成功:好的,我通过在 websocket 服务器连接中定义消费者 websocket ( binanceWS)message侦听器来做到这一点。我不确定这是否是一个好方法

"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);
  });
});

标签: javascriptnode.jswebsocket

解决方案


我为 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");
    });
});

推荐阅读