Javascript二进制文件到服务器

我试图找出一个高度可扩展的解决scheme(服务多个用户10000+)将是什么。

目标:我想要实现的是将一个鼠标坐标stream写入一个二进制文件到服务器,即一旦closuresstream,服务器就会直接从用户交互保存到服务器。 应该每20ms(大约50fps)推动一次坐标,以创build鼠标移动的精确表示。

a)我知道nodeJS可以用来写入数据stream,但是我不确定是否能够通过这样的结构来处理更高频率的更新 – 如果这是由多个用户完成的,这种方法可能会崩溃。

b)另一种可能性是在本地将文件写入二进制文件,然后将其上传到服务器。

任何人都可以评论这些方法的function,如果有另一种方法可以使用?

根据你的意见,服务器不需要实时的数据,你绝对不应该发送数据到服务器每20ms。 将其保存在客户端上,并且每隔30或60秒发送一次。 这可以在内存中完成一个数组。 保存鼠标坐标不是很紧张。

一旦你准备发送它,我想你会发现足够快的XMLHttpRequest满足你的需求。

这个演示显示了如何捕捉到坐标,并显示50fps是可行的(我在OS X上得到60fps)。

演示: http : //jsfiddle.net/ThinkingStiff/2Ls3A/

 var coordinates = [], count = 0, SECONDS = 1000, INTERVAL = 5; window.onmousemove = function ( event ) { //move cursor over page for at least 10 secs for an accurate reading coordinates.push( [event.pageX, event.pageY] ); }; window.setInterval( function () { console.log( ( coordinates.length - count ) / INTERVAL + 'fps' ); count = coordinates.length; }, INTERVAL * SECONDS ); 

如果您确实认为在发送数据时需要更高的效率,则通过Internet连接客户端和服务器计算机的最低延迟方法是持久性TCP套接字。 这通过WebSocket API在HTML中可用。

几乎所有的服务器端语言库都使用ws: URL模式( wss: for secure)来处理端点,例如socket.io

客户:

 var socket = new WebSocket('ws://example.com/endpoint' ); socket.onopen = function () { socket.send( 'send some text' ); }; 

我想一个更好的解决办法是将点存储到一个数组,然后转过身来发送到服务器。

此时,您需要启动一个新对象,并获得新的更新,当您进入函数发送到服务器,这样,在您准备和发送数据的时间,并得到一个响应,你仍然可以收集数据。

但是,你可能不会得到50fps,但你可以在不同的浏览器上testing,看看什么帧率是合理的预期。