5

8ビットの符号なしjavascript配列を作成しています:

 var myArray = Uint8Array(64);

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

4

1 に答える 1

6

注:クライアントとはブラウザを意味すると想定します。それ以外の場合は、詳細を明確にしてください。

Socket.ioは、主にさまざまなトランスポートを提供し、それらの多くがバイナリデータをサポートしていないため、バイナリデータをサポートしていません。

ただし、ネイティブWebSocketはBlobとArrayBufferをサポートします。

効率を上げるために本当にバイナリデータを使用したい場合(これがあなたの場合の方法であることに同意します)、socket.ioの代わりにwebsocketを使用することを検討する必要があると思います。

悪い人:

  • ユーザーの約55%のみが、WebSocketをサポートするブラウザーでWebを閲覧しています。
  • チャネル、emit、onメソッドなどのsocket.ioが提供する商品はありません。

いいもの:

  • WebソケットAPIは非常にシンプルです。

  • メモリ効率が大幅に向上します。通常、通常の配列は、最初にJSON文字列にしてから、返送することで転送されます。これは、実際に配列の文字列表現を送信していることを意味します。代わりに、ここでは、予想されるバイト数を送信します(送信前に文字列の長さをチェックせずに、より予測可能な方法で、必要に応じてより「プロトコル」的な方法で)。

WSを使用する場合は、次の項目を確認できます:http ://www.adobe.com/devnet/html5/articles/real-time-data-exchange-in-html5-with-websockets.html

それ以外の場合は、JSONを使用できます。

正直なところ、socket.ioと「ユニバーサル」サポートにJSONを使用する場合は、フラッシュトランスポートも有効にし、ゲームで低レイテンシが必要な場合は、低速のトランスポートを無効にします。

于 2012-10-04T01:06:40.623 に答える