Javascript 二进制文件到服务器

标签 javascript ajax node.js

我试图找出一个高度可扩展的解决方案(为 10000 多个用户提供服务)。

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

a)我知道nodeJS可以用来做写流,但我不确定这样的结构是否可以处理如此高频率的更新 - 而且如果这是由多个用户完成的,这种方法可能会失败。

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

任何人都可以评论这些方法的功能以及是否可以使用其他方法?

最佳答案

根据您的评论,服务器不需要实时数据,您绝对不应该每20ms向服务器发送一次数据。将其保存在客户端上并分块发送,例如每 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 ); 

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

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

客户端:

var socket = new WebSocket('ws://example.com/endpoint' );

socket.onopen = function () {

    socket.send( 'send some text' );

};

关于Javascript 二进制文件到服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11285267/

相关文章:

javascript - 如何在 virtual-dom 中定义 svg 属性?

javascript - bxSlider – 事件缩略图不透明度

javascript - 单击时插入组件,单击该组件以外的组件时删除该组件

javascript - Angular4 无法向 yii2 应用程序发送发布请求

javascript - Chrome下加载资源失败!目前不工作ajax

javascript - 循环数组并生成 Gulp 任务

javascript - 将动态键、值对添加到 JavaScript 数组或哈希表

javascript - 在优先级 AJAX 请求的情况下,如何处理浏览器对每个域的并行请求的限制?

database - 如何使用 Cassandra 数据库 (cql) 和 node.js 的简单示例

node.js - Kubernetes 上的 Node.js 容器中的 Axios 返回 "ECONNREFUSED 127.0.0.1:30561"?