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.

我只是在探索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.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更新时比较这两个值的方法,我不认为这达到了这个目的。