現在JSONを使用しており、クライアントとサーバー間のメッセージの種類によってはバイナリ形式に移行したいと考えています。
構造体をソケットに読み込むだけですか?プロチコールバッファー/リサイクルを使用しますか?
データの配列をどのように表すべきですか?
データのパック/アンパックのインターフェースはどのように見えるべきですか?
現在JSONを使用しており、クライアントとサーバー間のメッセージの種類によってはバイナリ形式に移行したいと考えています。
構造体をソケットに読み込むだけですか?プロチコールバッファー/リサイクルを使用しますか?
データの配列をどのように表すべきですか?
データのパック/アンパックのインターフェースはどのように見えるべきですか?
回答:
想定しています...
構造を定義するためにパケットのスペースを無駄にしないようにしてください。IEは最低でも、パケットのタイプを示すバイトを送信し、受信した各パケットがそのタイプのパケットの事前定義された構造に従うと仮定します
構造体をソケットに読み込むだけですか?プロチコールバッファー/リサイクルを使用しますか?
データの配列をどのように表すべきですか?
データのパック/アンパックのインターフェースはどのように見えるべきですか?
最後に、パケットサイズは特にスナップショットの場合に問題になります。サイズ= packetSize xエンティティx connectedPlayers; したがって、パケットごとに60 x 10 x 16 = 9,600バイトになる可能性があります。次に、これを1秒に20回送信します。= 192,000 bps = 187 KBps。これは明らかに帯域幅の高いアップロード速度です。したがって、可能であれば、パケットサイズに寄与する各要素を最小限に抑える必要があります。
この記事は私を大いに助けてくれました: Valveマルチプレイヤーネットワーキング
この問題はGoogleとFacebookによって解決されています。
Googleのプロトコルバッファ — GoogleはC ++の大ユーザーです。
プロトコルバッファは、構造化データを効率的かつ拡張可能な形式でエンコードする方法です。Googleでは、ほとんどすべての内部RPCプロトコルとファイル形式にプロトコルバッファーを使用しています。
Apache Thrift(以前はFacebookによる):
Thriftは、スケーラブルな言語間サービス開発のためのソフトウェアフレームワークです。ソフトウェアスタックとコード生成エンジンを組み合わせて、C ++、Java、Python、PHP、Ruby、Erlang、Perl、Haskell、C#、Cocoa、JavaScript、Node.js、Smalltalk、OCamlの間で効率的かつシームレスに機能するサービスを構築します。