1

非常にスケーラブルなソリューション (10000 以上の複数のユーザーにサービスを提供する) とは何かを理解しようとしています。

目標: 私が達成したいのは、マウス座標のストリームをバイナリ ファイルにサーバーに書き込むことです。つまり、ストリームが閉じられると、サーバーはユーザー インタラクションからサーバーに直接保存されます。座標を 20ms (約 50fps) ごとにプッシュして、マウスの動きに近い表現を作成する必要があります。

a)nodeJSを使用して書き込みストリームを実行できることは知っていますが、そのような構造でそのような高頻度の更新を処理できるかどうかはわかりません-これが複数のユーザーによって行われる場合、このアプローチは崩壊する可能性があります.

b) もう 1 つの可能性は、ファイルをローカルでバイナリに書き込み、その後サーバーにアップロードすることです。

これらのアプローチの機能と、使用できる別の方法があるかどうかについて、誰でもコメントできますか?

4

2 に答える 2

1

サーバーはリアルタイムでデータを必要としないというコメントに基づいて、20msごとにデータをサーバーに送信しないでください。クライアントに保存し、チャンクで、たとえば 30 秒または 60 秒ごとに送信します。これは、配列のメモリ内で実行できます。マウス座標の保存はそれほど集中的ではありません。

XMLHttpRequest送信する準備ができたら、ニーズに合った十分な速さを見つけることができると思います.

このデモでは、座標にキャプチャする方法を示し、50 fps が実行可能であることを示しています (OS X の Chrome で最大 60 fps を取得しています)。

デモ: 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' );

};
于 2012-07-01T20:44:47.647 に答える
0

より良い解決策は、ポイントを配列に保存してから、方向転換してサーバーに送信することだと思います。

この時点で、新しいオブジェクトを開始して新しい更新を取得する必要があります。サーバーに送信する関数に入るとき、このようにして、データを準備して送信し、応答を取得している間に、引き続きデータを収集できます。

ただし、おそらく 50 fps は得られませんが、さまざまなブラウザーでテストして、期待する妥当なフレーム レートを確認できます。

于 2012-07-01T20:42:22.617 に答える