2012-01-25 8 views
1

私はprotobuf-netを使って、オブジェクトの状態データを標準のprotobuf-net形式で通信してきました。Protobuf-net RPCのbyte []は?

オブジェクトをシリアル化して、バイト配列を取り出し、配列を暗号化してUDP経由で送信しています。クライアントはbyte []配列を取得し、オブジェクトを復号化して逆シリアル化し、すべてがうまく機能します。

私はこの方法を好んでいます。なぜなら、常に最高の接続または最も信頼性の高い接続を持つとは限らない多数のデータビューア端末があるからです。

ここで、いくつかのRPCメカニズムを追加する必要があります。私は、同じ種類の機能セット(シリアライズ、暗号化、およびUDP経由のシュート)を利用したいと思っています。

私はすでにインターフェイスを持っており、WCFとXML-RPCを接続しています。私はWCFエンドポイントとしてprotobuf-netを利用してみましたが、それが私が探しているものであるとは確信していません。私はすでに持っている暗号化スキームですべてを包み込み、他の多くのコードを再利用できるようにしたいと思っています。

私はprotobuf-netの基本的なhttp RPCの例を見てきましたが、RPC用にbyte []を得る方法を探していました。私はコードの良い塊を書くことを喜んでいるだろう。私はちょうどどこから始めるのが良いのか分かりません。

アイデア?

編集:

これは私のステータスメッセージを通常送信する方法です。どれだけいるProtobufネットで連載いくつかの変数今、私は誰がアップしているものをラップし、それを送信する方法上の任意のアイデアを持っていないインターフェイス、

public interface { void SetMovementMode(int Axis, int Mode); ..... }

のようなものを持っている

ProtoBuf.Serializer.SerializeWithLengthPrefix(mStream, Common.Share, ProtoBuf.PrefixStyle.Fixed32); 

    byte[] ptext2 = RNGBytes.Concat(mStream.ToArray()).ToArray(); 

    byte[] plainTextBytes = Encoding.UTF8.GetBytes(Convert.ToBase64String(RNGBytes) + plainText); 

    cryptoStream.Write(ptext2, 0, ptext2.Length); 

    // Finish encrypting. 
    cryptoStream.FlushFinalBlock(); 

    // Now we're done with the memory stream, let's turn it back into an array of bytes. 
    byte[] cipherTextBytes = memoryStream.ToArray(); 

    foreach (IPEndPoint iep in BroadcastToIPs) 
    { 
     U.Send(cryptoStream.GetBuffer(), (int)mStream.Length, iep); 
    } 

    // Close both streams. 
    memoryStream.Close(); 
    cryptoStream.Close(); 

同様の方法で、それを暗号化することができるなど?

+0

私が持っている1つの考え:[rpc.proto](http://code.google.com/p/protobuf-socket-rpc/source/browse/ trunk/proto/rpc.proto)をprotobuf-socket-rpc Javaプロジェクトから読み込み、すべてを元に戻すためにリフレクションを使用します。 –

+0

「RPCを使用するためにバイトを取得する」と言えば、より具体的にできますか?バイト[]はそれがどのように使われているか気にしません...もっと具体的には、どのステップが頭痛を引き起こしていますか?あなたが探している使用法は何ですか? (私はいくつかのことを念頭に置いているかもしれませんが、問題についてより明確にする必要があります) –

+0

追加情報を追加するために編集されています。 –

答えて

1

protobuf-netでzeroMQを使用してRPC(.NETから.NET、Pythonから.NET)を実行しています。 ZMQはブローカレスのメッセージングフレームワークで、バイト[]を送信し、最小限のコードでさまざまなきれいなアーキテクチャを構築することができます。また、あらゆる種類の言語のバインディングがあります。彼らのガイドを確認してくださいhere