socketjs: запросить значение с сервера - PullRequest
0 голосов
/ 07 декабря 2018

Я пытаюсь запросить значение с сервера через socketjs.

Вот client.js

function onClick({clientX, clientY}) {      
      console.log("====== #click: "+clickNo);
      clickNo++;
      var srcWidth, srcHeight, mouseClickX, mouseClickY;
      console.log("onmouseEnter: "+clientX +", "+clientY)

      mouseClickX = clientX;
      mouseClickY = clientY;

      socket.emit('screenSize');
      socket.on('resolution', function (data) {
          srcWidth = data.srcWidth;
          srcHeight = data.srcHeight;
          console.log("resolution: "+srcWidth +', '+srcHeight);
          console.log("mouseClick= "+mouseClickX +', '+mouseClickY)
          //moveMouseToPos(mouseClickX, mouseClickY);
      });
}

и в Server.js

socket.on('screenSize', ()=>{console.log("screenSize Req")
  socket.emit('resolution',{
    srcWidth: robot.getScreenSize().width,
    srcHeight: robot.getScreenSize().height

  });
});

Я могу получить значение с сервера, но проблема в том, что я получаю такжестарое значение.вот console.log

====== #click: 0
onmouseEnter: 882, 143
resolution: 1366, 768
mouseClick= 882, 143
====== #click: 1
onmouseEnter: 919, 352
resolution: 1366, 768
mouseClick= 882, 143
resolution: 1366, 768
mouseClick= 919, 352
====== #click: 2
onmouseEnter: 772, 452
resolution: 1366, 768
mouseClick= 882, 143
resolution: 1366, 768
mouseClick= 919, 352
resolution: 1366, 768
mouseClick= 772, 452
====== #click: 3
onmouseEnter: 447, 389
resolution: 1366, 768
mouseClick= 882, 143
resolution: 1366, 768
mouseClick= 919, 352
resolution: 1366, 768
mouseClick= 772, 452
resolution: 1366, 768
mouseClick= 447, 389

Вы можете видеть, что при первом щелчке клиент получает идеальное значение, но при втором щелчке - его печать два раза, при третьем щелчке - его печать 3 раза.Похоже, эта функция вызывается три раза с предыдущими параметрами.

Любая идея?

1 Ответ

0 голосов
/ 08 декабря 2018

Не уверен насчет старых значений, но я вижу одну проблему: прослушиватель сокетов в клиенте "socket.on ('resolution'"), который создается несколько раз, всегда при вызове функции OnClick.должен быть создан вне функции. В противном случае у вас будет несколько слушателей одного и того же события. Надеюсь, это поможет.

...