2012-10-04 27 views
5

イム「ワイヤー上」の配列を入力:Javascriptが8ビット符号なしjavascript配列を作成

var myArray = Uint8Array(64); 

クライアントとサーバーの両方で、この配列を操作し、socket.io接続経由で送信します。私たちはゲームを書くので、データはできるだけ小さくワイヤで送信されます。 socket.ioはバイナリデータの送信をサポートしていないので、javascript型付き配列で迷惑をかける価値があるか、通常のjavascript配列を使用するだけですか?それらはまだネイティブjs配列よりも小さくなりますか?

+0

これは、ネットワーク経由でデータを送信するために使用しているシリアル化ライブラリ/ RPCプロトコルによって異なります。 – millimoose

答えて

6

注:私は、クライアントがブラウザを意味すると仮定します。そうでない場合は、詳細を明記してください。

Socket.ioはバイナリデータをサポートしていません。これは主に転送が異なるためで、多くの場合はサポートされていないためです。

しかし、ネイティブWebソケットDOはBlobとArrayBuffersをサポートしています。

バイナリデータを効率的に使用したい場合(私は同意します)、socket.ioではなくwebsocketを使用することを検討してください。

悪い:ユーザーの

  • のみ〜55%のWebSocketをサポートしているブラウザでウェブを閲覧。
  • channels、emit、onメソッドなどの商品socket.ioは用意されていません。

良い:

  • ウェブソケットAPIは非常に簡単です。

  • これははるかにメモリ効率が良いでしょう。通常は、通常の配列はJSON文字列にしてから送信します。これは実際に配列の文字列表現を送信していることを意味します。代わりに、ここで期待するバイト数を送信します(送信する前に文字列の長さを確認することなく、より予測可能な方法で送信しますが、必要に応じてもっと "プロトコル"方式で送信します)。あなたはWSを使用する場合

、あなたはこれをチェックすることができ:エルスhttp://www.adobe.com/devnet/html5/articles/real-time-data-exchange-in-html5-with-websockets.html

あなただけのJSONで行くことができます。

真実を伝えるために、socket.ioと "universal"のサポートのためにJSONを使用している場合は、フラッシュ転送を有効にし、ゲームの待ち時間が短い場合は低速転送を無効にしてください。

+0

これは私が考えたものです。あなたは物事をより明確にすることができますが。ゲームはチェスです...スピードは大事なことではありませんが、私はゲームを書くことを学ぶためにゲームを書いています。だから私は可能な限り効率的にしようとしています。とにかく私は今socket.ioの道をはるか遠くまで下っています。あなたが指摘したようにプラスは、それが素晴らしい高レベルの機能の割り当てを追加します。 – AndrewMcLagan

+0

私はJS型の配列を使用して考えていますバイナリソケットなしでさえ、スペースは節約されますが、少量です。私はボード上に64の正方形があるので、Uint8Array(64)でチェスボードを表しています。可能なタイプは12種類しかないので、1から12までの数字を表現し、それらをボード配列に配置します。次に、サーバーとクライアントには、ピースコードとそのピースの名前を関連付けるpieceMapオブジェクトがあります。例えば{1: 'BlackKnight'、2: 'WhiteKnight'} – AndrewMcLagan

+1

普通の配列と比べてスペースを節約することはできません。サーバーに送信されると、それはJSONを使用して行われるため、文字列に変換されます。 – Mamsaac

関連する問題