使用socket.io在其他客户端计算机中显示鼠标指针移动

时间:2014-07-06 18:03:02

标签: node.js socket.io raphael

我正在使用socket.io引擎来跟踪浏览器中的鼠标指针移动并将其发送到多个Web浏览器。在这里,我获得鼠标指针的x,y坐标,然后使用socket.io引擎发送它。

socket.emit('mouse_position', {mx : x, my : y});

之后,我通过以下代码

从应用程序中获取相关数据
socket.on('mouse_position', function(data) {
    socket.broadcast.emit('mouse_position_update', data);
});

我使用raphael对象在其他浏览器中显示鼠标指针,并使用animate函数根据父鼠标指针移动显示鼠标指针。

var paper = new Raphael(canvas, 200, 200);
var cur = paper.circle(0, 0, 3);
cur.animate({
    cx : data.mx,
    cy : data.my
}, 1, 'linear');

此代码中的问题是,如果我的许多用户(> 100)登录到此系统,将使用大量带宽并且系统可能会崩溃。任何人都可以告诉我有没有更好的方法来使用socket.io引擎实现这个系统,或者我们可以使用任何算法来解决带宽问题。 任何形式的帮助对我都有很大的帮助。

1 个答案:

答案 0 :(得分:4)

您应该减少发送鼠标坐标的时间。按照您的方式改变鼠标的每个像素,您的数据将被发送。 (将console.log(1)放入回调并移动鼠标几秒钟。)

您可以通过以下方式减少发送数据的时间:

var prevMouseX, prevMouseY;
var intervalID = window.setInterval(function(){
   ... you get your mouse coordinates

   if (prevMouseX !== x || !prevMouseY !== y) {
      socket.emit('mouse_position', {mx : x, my : y});
   }
}, 500);

这样,您将每隔0.5秒发送一次鼠标坐标,并且只有在它们发生变化时才会发送。