2016-08-27 64 views
-1

リアルタイムマルチプレイヤーゲームの場合、サーバーはWebsocketを使用してバイナリメッセージ(メッセージ)をクライアントに送信しています。Websocket - メッセージの分割

メッセージの最初のバイト(uint8)は、 "パケットID"となります。

:次のバイトのx、y、スコア、名前の "更新エンティティ"へのパケット1。

しかし、に帯域幅を最適化、私は 2間のフレームを変更する値のみを送信したいと思います。

例(すべての値が変更された): "更新エンティティの位置" にパケット2: "更新エンティティスコア" のX、Y

パケット3:更新エンティティ名」に

パケット4のスコア「:考慮しないサイズ(の用語では、分割しない1つのメッセージ(1パケット)を送信するよりも同じ(4、パケット2、3)大量のメッセージを送信している:

私の質問があるに名前を付けます追加のパケットID "バイト、無視できる)?各Websocketメッセージに追加コストはかかりませんか?

答えて

1

サーバからの(つまりマスキングされた)各Websocketメッセージは、少なくとも8バイトのプロトコルオーバーヘッドを有する。

メッセージが別々のTCPパケットとして送信された場合(たとえば、NAGLEアルゴリズムがHTTP/WSSのように無効になっている場合など)、TCPパケットごとにオーバーヘッドが発生します。または60バイト(IPv6)。 wss://を使用すると、TLSレコードのフレーミングも上に表示されます。

+0

ありがとうございました。 wssを使用すると、重いようです。 scoreFlag = 1の場合は、packetID(uint8)、xyFlag(uint8)、x(uint16)、xyFlag = 1、y ...、scoreFlag(uint8)、score(uint16)のようなユニークなメッセージを送信します。ここでは、statePropertyが最後のフレームから変更されていないときのフラグ= 0です。 statePropertyがuint8の場合、フラグは設定されません。 – zbeyens

関連する問題