2012-01-25 45 views
1

我一直在使用protobuf網以標準protobuf網時尚溝通對象狀態數據。帶有byte []的Protobuf-net RPC?

我一直在序列化對象,得到一個byte []數組,加密數組並通過UDP發送出去。然後客戶端獲取byte []數組,對對象進行解密和反序列化,並且所有事情都很好地工作。

我喜歡這樣做,因爲我們可以有一些數據查看器終端,可能並不總是有最好或最可靠的連接。

現在我需要添加一些RPC機制。我非常想使用相同類型的功能集(通過UDP進行序列化,加密和發射)。

我已經有一個接口,並有WCF和XML-RPC掛鉤它。我已經研究過使用protobuf-net作爲WCF終端,我不太確定這是我正在尋找的。我真的希望能夠將所有的東西都包裝在我已經擁有的加密方案中,並重復使用了很多其他代碼。

我已經看過protobuf-net中的基本http RPC示例,並且一直在尋找一種獲取RPC使用的字節[]的方法。我願意寫一大段代碼;我真的不知道從哪裏開始。

任何想法?

編輯:

所以這裏是我通常發送我的狀態消息。這僅僅是一些變量與protobuf網連載

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(); 

現在我有一個接口,像

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

有沒有人對如何包裝一上來並送出任何想法以類似的方式,能夠加密它等?

+0

想到我一直在:使用實現sumilar到[rpc.proto](http://code.google.com/p/protobuf-socket-rpc/source/browse/ trunk/proto/rpc.proto)來自protobuf-socket-rpc Java項目並使用反射來將所有內容都推回......但我覺得我錯過了某些東西,如果我這樣做的話。 –

+0

當你說「得到一個字節[] RPC使用」 - 你能更具體嗎?一個字節[]並不關心它是如何使用的......更具體地說,導致頭痛的是什麼步驟?你在找什麼樣的用法? (我可能有一些想法,但我需要更清楚地解決這個問題) –

+0

編輯添加額外的信息。 –

回答

1

我使用zeroMQ與protobuf網做我的RPC(.NET到.NET和Python到.NET)。 ZMQ是一個無代理的消息傳遞框架,允許您發送byte [],並以最少的代碼構建各種整潔的體系結構。還有各種語言的綁定。看看他們的指南here