javascript - 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);
});
});
解决方案
我为 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");
});
});
推荐阅读
- visual-studio-code - 自动右括号在 VS Code 中停止工作
- javascript - Bootstrap Popover 无法在 Mapbox Popup 中打开
- deep-learning - Detectron2 Mask R-CNN 细胞分割 - 什么都看不见
- haskell - 使用数据构造函数作为函数参数
- ruby-on-rails - Rails为rich_text字段形成最大长度?
- if-statement - 在 if else 语句中使用 useState 改变状态的问题
- audio - 如何将 AC3 音频转换为 Wav 音频?
- javascript - 查找共线点的坐标
- graphql - 如何为带有 InMemoryCache 的 apollo-client 中的正则表达式匹配的任何数据指定最大缓存时间?
- android - 尝试在 Android Studio 中重建项目时出错