Сравнение данных в реальном времени из двух веб-сокетов - PullRequest
0 голосов
/ 05 октября 2018

Я просто открываю websockets и узел js, но пытаюсь понять, как сделать следующее.Я хочу сравнить значения из двух разных веб-сокетов.

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?

Я пытался поставить второй вызов в сообщении внутри первого.но затем он начинает зацикливаться каждый раз, когда вызывается первый, и прерыватели после вызова сообщения несколько раз.

Ответы [ 2 ]

0 голосов
/ 05 октября 2018

Несмотря на то, что ZeekHuge прав, мы должны помнить о сфере действия - мы также должны учитывать асинхронную природу веб-сокетов - мы можем проводить сравнение только после того, как получили сообщение.Вспомогательный метод может вызываться при каждом получении сообщения для сравнения значения.

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);
});
0 голосов
/ 05 октября 2018

Чтобы иметь возможность сравнивать переменную из 2-х веб-сокетов, вам нужно сохранить одну из переменных, которая должна находиться в «большей» области видимости (по крайней мере, в данном примере, так как база данных не задействована)).Используя ваш код в качестве примера:

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


});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...