我一直在使用protobuf-net以标准的protobuf-net方式传递对象状态数据。
我一直在序列化这个对象,获取一个byte[]数组,对数组进行加密,然后通过UDP发送出去。然后,客户端获取byte[]数组,解密并反序列化对象,一切都非常顺利。
我喜欢这样做,因为我们可以拥有许多数据查看器终端,这些终端可能并不总是具有最好或最可靠的连接。
现在我需要添加一些RPC机制。我非常想利用同样的特性集(序列化、加密和通过UDP传输)。
我已经有了一个接口,并且有WCF和XML-RPC连接到它。我已经考虑过使用protobuf-net作为WCF端点,但我不太确定它是否是我正在寻找的。我真的希望能够将我已经拥有的加密方案中的所有东西都打包在一起,并重用许多其他代码。
我已经在protobuf-net中查看了基本的http RPC示例,并且一直在寻找一种方法来获得供RPC使用的byte[]。我很愿意写一大块代码,只是我真的不知道从哪里开始。
有什么想法吗?
编辑:
下面是我通常发送状态消息的方式。它只是一些用protobuf-net序列化的变量
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); ..... }
有没有人有任何想法如何包装它,并以类似的方式发送它,能够加密它,等等?
发布于 2012-08-17 17:31:57
我使用zeroMQ和protobuf-net进行远程过程调用(从.NET到.NET,从python到.NET)。ZMQ是一个无代理的消息传递框架,它允许你发送byte[],并用最少的代码构建各种整洁的架构。此外,还有各种语言的绑定。查看他们的指南here
https://stackoverflow.com/questions/8997849
复制相似问题