Node.js 比较来自两个WebSocket的实时数据
我只是在探索WebSocket和node js,但我想知道如何做到以下几点。我想比较两个不同WebSocket的值Node.js 比较来自两个WebSocket的实时数据,node.js,websocket,Node.js,Websocket,我只是在探索WebSocket和node js,但我想知道如何做到以下几点。我想比较两个不同WebSocket的值 const WebSocket = require('ws'); const ws = new WebSocket('wss://1'); const w = new WebSocket('wss://2') ws.on('message', function incoming(data) { var myval1= JSON.parse(data); }); w.
const WebSocket = require('ws');
const ws = new WebSocket('wss://1');
const w = new WebSocket('wss://2')
ws.on('message', function incoming(data) {
var myval1= JSON.parse(data);
});
w.on('message', function incoming(data) {
var myval2= JSON.parse(data);
});
var whatIwant = myval1 - myval2;
我怎样才能继续比较myva1和myval2呢
我已经尝试将第二个on message调用放在第一个调用内,但每次调用第一个调用时,它都会开始循环,并且在调用几次message之后会断开。要能够比较来自2个web套接字的变量,您必须将其中一个变量保存在“更大”的范围内(至少在给定的示例中,因为不涉及数据库)。以代码为例:
const WebSocket = require('ws');
const ws = new WebSocket('wss://1');
const w = new WebSocket('wss://2')
var myval1 = null;
var myval2 = null;
ws.on('message', function incoming(data) {
myval1= JSON.parse(data);
});
w.on('message', function incoming(data) {
myval2= JSON.parse(data);
});
var whatIwant = myval1 - myval2;
请注意,在您的代码中还有更重要的事情需要考虑:
将在运行此脚本后立即执行,消息不会到达var whatIwant…
const WebSocket = require('ws');
const ws = new WebSocket('wss://1');
const w = new WebSocket('wss://2')
var w_val = null;
var ws_val = null;
ws.on('message', function incoming(data) {
ws_val = JSON.parse(data);
if (w_val !== null ) {
var comp = ws_val - w_val;
w_val = null;
ws_val = null;
}
});
w.on('message', function incoming(data) {
w_val = JSON.parse(data);
if (ws_val !== null ) {
var comp = ws_val - w_val;
ws_val = null;
w_val = null;
}
});
为了能够比较来自2个web套接字的变量,您必须保存其中一个变量,该变量必须位于“更大”的范围内(至少在给定的示例中,因为不涉及数据库)。以您的代码为例:
const WebSocket = require('ws');
const ws = new WebSocket('wss://1');
const w = new WebSocket('wss://2')
var myval1 = null;
var myval2 = null;
ws.on('message', function incoming(data) {
myval1= JSON.parse(data);
});
w.on('message', function incoming(data) {
myval2= JSON.parse(data);
});
var whatIwant = myval1 - myval2;
请注意,在您的代码中还有更重要的事情需要考虑:
将在运行此脚本后立即执行,消息不会到达var whatIwant…
const WebSocket = require('ws');
const ws = new WebSocket('wss://1');
const w = new WebSocket('wss://2')
var w_val = null;
var ws_val = null;
ws.on('message', function incoming(data) {
ws_val = JSON.parse(data);
if (w_val !== null ) {
var comp = ws_val - w_val;
w_val = null;
ws_val = null;
}
});
w.on('message', function incoming(data) {
w_val = JSON.parse(data);
if (ws_val !== null ) {
var comp = ws_val - w_val;
ws_val = null;
w_val = null;
}
});
虽然ZeekBuggage是正确的,我们需要记住作用域-我们还必须考虑WebSocket的异步性质-我们只能在收到消息后进行比较。每次收到消息时都可以调用帮助器方法来比较值
const WebSocket = require('ws');
const ws = new WebSocket('wss://1');
const w = new WebSocket('wss://2')
let myval1;
let myval2;
function compareValues(a, b) {
// Do some kind of comparison here.
if (a === b) {
// Do a thing.
};
}
ws.on('message', function incoming(data) {
myval1= JSON.parse(data);
compareValues(myval1, myval2);
});
w.on('message', function incoming(data) {
myval2= JSON.parse(data);
compareValues(myval1, myval2);
});
虽然ZeekBuggage是正确的,我们需要记住作用域-我们还必须考虑WebSocket的异步性质-我们只能在收到消息后进行比较。每次收到消息时都可以调用帮助器方法来比较值
const WebSocket = require('ws');
const ws = new WebSocket('wss://1');
const w = new WebSocket('wss://2')
let myval1;
let myval2;
function compareValues(a, b) {
// Do some kind of comparison here.
if (a === b) {
// Do a thing.
};
}
ws.on('message', function incoming(data) {
myval1= JSON.parse(data);
compareValues(myval1, myval2);
});
w.on('message', function incoming(data) {
myval2= JSON.parse(data);
compareValues(myval1, myval2);
});
如何确定消息对?这是一个依赖于状态的问题。可能当第一个发送消息时,第二个还没有发送任何消息,反之亦然。您需要检查所有这些。@我的问题是,如何在on message call之外访问myval2或myval1?所以每次两个WebSocket中的一个更新后,我检查与另一个变量的差异。@Callombert:变量必须位于“较大”的位置作用域。我猜这是一个全局变量。@ZeekBug关于如何做到这一点的示例?您如何确定消息对?这是一个状态相关的问题。可能第一个发送消息时,第二个还没有发送任何消息,反之亦然。您需要检查所有这些。@ZeekBug我的问题是如何访问ss myval2或myval1在on message call之外?因此每次更新两个WebSocket中的一个时,我都会检查与另一个WebSocket的差异。@Callombert:变量必须位于“较大”的位置作用域。我猜这是一个全局变量。@Zeek请给出一个关于如何做的巨大示例?我想要的是每次websocket更新时比较这两个值的方法,我不认为这达到了这个目的。我想要的是每次websocket更新时比较这两个值的方法,我不认为这达到了这个目的。