Javascript 二进制文件到服务器

Javascript binary file to server

本文关键字:服务器 二进制文件 Javascript      更新时间:2023-09-26

我试图弄清楚高度可扩展的解决方案(为10000+的多个用户提供服务)是什么。

目标:我想要实现的是将鼠标坐标流写入二进制文件到服务器,即一旦流关闭,服务器就会从用户交互直接保存到服务器。坐标应每 20 毫秒(约 50fps)推送一次,以创建鼠标移动的紧密表示。

a) 我知道 nodeJS 可以用来做一个写流,但我不确定这样的结构是否可以处理如此频繁的更新 - 如果这是由多个用户完成的,这种方法可能会分崩离析。

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

任何人都可以评论这些方法的功能,以及是否有另一种方法可以使用?

根据您对服务器不需要实时数据的评论,您绝对不应该每 20 毫秒将数据发送到服务器。 将其保存在客户端上并分块发送,例如每 30 或 60 秒发送一次。这可以在数组的内存中完成。保存鼠标坐标不是很密集。

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

该演示展示了如何捕获到坐标,并表明 50fps 是可行的(我在 OS X 上的 Chrome 中获得了高达 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 ); 

如果您真的认为您需要更高的数据发送效率,那么通过互联网连接客户端和服务器计算机的最低延迟方法是持久性TCP套接字。这可以通过 HTML WebSocket API 获得。

几乎每种服务器端语言中都有库,它们使用 ws: URL 架构(wss:表示安全)处理端点,例如socket.io

客户:

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

我认为更好的解决方案是将点存储到数组中,然后转身将其发送到服务器。

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

但是,您可能不会获得 50fps,但您可以在不同的浏览器上进行测试,看看合理的帧速率。