我正在使用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引擎实现这个系统,或者我们可以使用任何算法来解决带宽问题。 任何形式的帮助对我都有很大的帮助。
答案 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秒发送一次鼠标坐标,并且只有在它们发生变化时才会发送。