WebSocket 在 Vue/Node 应用程序中停止工作
WebSocket stops working in Vue/Node application
我有一个 Node/Vue 应用程序。我正在使用加密货币交易所 Binance 的 WebSocket。我可以在记录它们时在服务器控制台上看到引号,我可以在客户端停止记录它们之前将它们发送到浏览器一小段时间。
浏览器正在使用 WebSocket
API
节点使用 ws
库
节点代码,我是运行因为它自己的服务就是这样。
'use strict';
const WebSocket = require('ws');
const binanceWS = new WebSocket('wss://stream.binance.com:9443/ws/btcusdt@trade')
const server = new WebSocket.Server({ port: 5002 });
//websocket connection event will return a socket you can later use
binanceWS.on("open", function() {
console.log("connected to Binance");
});
binanceWS.on('message', function(data){
console.log(data);
server.on('connection', function connection(ws){
console.log("Connected a new client");
ws.send(data);
});
server.on('closed', function (id){
console.log("connection closed");
console.log(id);
});
server.on('error', function (err){
console.log(err)
})
})
在客户端,我使用的是 Vue,在 app.js 文件中,我在 created
挂钩上有这个。
let socket = new WebSocket("ws://localhost:5002")
socket.addEventListener('message', function(event){
let quotes = JSON.parse(event.data);
console.log(quotes.p)
});
socket.addEventListener('error', function(event){
console.log("closing because " + event);
})
现在我只听上面 app.vue
文件中的控制台。
我在浏览器控制台看到的是很多引号,然后在一两秒后停止。有时可以有上千条引号。然后有时我会在 app.vue
的子组件中看到一个 console.log('created')
。在许多情况下,这是数百个引号后控制台中的最后一件事。
在服务器的 console.log 中,我看到许多会话都是通过刷新一页创建的。这么多,它填满了我的控制台。
所以我不确定我是否正确地创建了连接,我不确定 Vue 是否以某种方式停止了 console.log?
我在服务器控制台的任何地方和整个时间都没有看到任何错误 Binance API 继续流式传输。
你必须在 binance 之外的消息处理程序上编写服务器事件侦听器;
然后您可以通过向服务器发出新事件来将消息从 binance 传递到服务器
从 binance 收到消息后,您可以将数据发送到服务器上的所有连接
或者试试这个代码,我认为它会起作用:
'use strict';
const WebSocket = require('ws');
const binanceWS = new WebSocket('wss://stream.binance.com:9443/ws/btcusdt@trade')
const server = new WebSocket.Server({ port: 5002 });
server.on('connection', function connection(ws){
console.log("Connected a new client");
});
server.on('closed', function (id){
console.log("connection closed");
console.log(id);
});
server.on('error', function (err){
console.log(err)
})
//websocket connection event will return a socket you can later use
binanceWS.on("open", function() {
console.log("connected to Binance");
});
binanceWS.on('message', function(data){
console.log(data);
server.clients.forEach(function each(client) {
if (client.readyState === WebSocket.OPEN) {
client.send(data);
}
});
})
我有一个 Node/Vue 应用程序。我正在使用加密货币交易所 Binance 的 WebSocket。我可以在记录它们时在服务器控制台上看到引号,我可以在客户端停止记录它们之前将它们发送到浏览器一小段时间。
浏览器正在使用 WebSocket
API
节点使用 ws
库
节点代码,我是运行因为它自己的服务就是这样。
'use strict';
const WebSocket = require('ws');
const binanceWS = new WebSocket('wss://stream.binance.com:9443/ws/btcusdt@trade')
const server = new WebSocket.Server({ port: 5002 });
//websocket connection event will return a socket you can later use
binanceWS.on("open", function() {
console.log("connected to Binance");
});
binanceWS.on('message', function(data){
console.log(data);
server.on('connection', function connection(ws){
console.log("Connected a new client");
ws.send(data);
});
server.on('closed', function (id){
console.log("connection closed");
console.log(id);
});
server.on('error', function (err){
console.log(err)
})
})
在客户端,我使用的是 Vue,在 app.js 文件中,我在 created
挂钩上有这个。
let socket = new WebSocket("ws://localhost:5002")
socket.addEventListener('message', function(event){
let quotes = JSON.parse(event.data);
console.log(quotes.p)
});
socket.addEventListener('error', function(event){
console.log("closing because " + event);
})
现在我只听上面 app.vue
文件中的控制台。
我在浏览器控制台看到的是很多引号,然后在一两秒后停止。有时可以有上千条引号。然后有时我会在 app.vue
的子组件中看到一个 console.log('created')
。在许多情况下,这是数百个引号后控制台中的最后一件事。
在服务器的 console.log 中,我看到许多会话都是通过刷新一页创建的。这么多,它填满了我的控制台。
所以我不确定我是否正确地创建了连接,我不确定 Vue 是否以某种方式停止了 console.log?
我在服务器控制台的任何地方和整个时间都没有看到任何错误 Binance API 继续流式传输。
你必须在 binance 之外的消息处理程序上编写服务器事件侦听器;
然后您可以通过向服务器发出新事件来将消息从 binance 传递到服务器
从 binance 收到消息后,您可以将数据发送到服务器上的所有连接
或者试试这个代码,我认为它会起作用:
'use strict';
const WebSocket = require('ws');
const binanceWS = new WebSocket('wss://stream.binance.com:9443/ws/btcusdt@trade')
const server = new WebSocket.Server({ port: 5002 });
server.on('connection', function connection(ws){
console.log("Connected a new client");
});
server.on('closed', function (id){
console.log("connection closed");
console.log(id);
});
server.on('error', function (err){
console.log(err)
})
//websocket connection event will return a socket you can later use
binanceWS.on("open", function() {
console.log("connected to Binance");
});
binanceWS.on('message', function(data){
console.log(data);
server.clients.forEach(function each(client) {
if (client.readyState === WebSocket.OPEN) {
client.send(data);
}
});
})