2012-03-01 2 views
0

私は、個人用のクライアント/サーバーメディアアプリケーションを構築しています。アプリケーションは動作しますが、接続ごとに2つのソケットがあります:1つはサーバー/クライアントコマンドと通信用です(JSON文字列を前後に送信するものとシリアル化されたメディアを送信するものです)。どのように多目的ソケットプロトコルを実装していますか?

2つのソケットを私は、データがどのようにあるか、彼らがそうであるように、それはよりよいちょうどそれらを残すことが何であるかを知っているファッション

答えて

2

あなたが例えば両方のための単一のソケットを使用するためにあなたのメッセージに構造を定義する必要があります:?

Message format: 
    Command,DataLen,Data 

Example messages: 
    JSON,20,{ "text": "Hello!" } 

    CMD1:9:Some Data 

これは、カンマを使用してコマンドをデータ長からデータから分離する「テキストベースの」形式です。例えば、(解析がおそらくより簡単に、より堅牢である)バイナリ形式:

CommandLen(4-bytes):Command:DataLen(4-bytes):Data 
+0

@EvanTeran、brettwどのようにこのサポート生のバイナリストリーミングしていますか?私が知る限り、生のバイナリをJSON文字列に入れる方法はありません。明らかに、私はJSONメッセージを送ることができます、 'ねえ、クライアントはxxxバイナリデータを期待しています'が、これはメッセージ/バイナリデータの同期を扱っていません。 – AedonEtLIRA

+1

JSONでエンコードされたバイナリデータを送信する場合は、おそらくbase64エンコーディングを使用します。シンプルで、データサイズの膨張が比較的小さい。 –

+0

@EvanTeranアドバイスをいただきありがとうございます。私は単純なArrays.toString(byte [])を行い、再びベンチマークを行い、それをBase64と比較しました。あなたは勝つ。もう一度ありがとう、私はBas64の壮大さについては知らなかった。 – AedonEtLIRA

関連する問題