【问题标题】:Protobuf-net RPC with byte[]?带有字节 [] 的 Protobuf-net RPC?
【发布时间】:2012-02-18 08:23:58
【问题描述】:

我一直在使用 protobuf-net 以标准 protobuf-net 方式传达对象状态数据。

我一直在序列化对象,取出一个 byte[] 数组,加密该数组并通过 UDP 将其发送出去。然后客户端获取 byte[] 数组,解密和反序列化对象,一切都很好。

我喜欢这样做,因为我们可以拥有许多数据查看器终端,这些终端可能并不总是具有最佳或最可靠的连接。

现在我需要添加一些 RPC 机制。我非常想使用相同类型的功能集(通过 UDP 序列化、加密和发射)。

我已经有了一个接口,并且连接了 WCF 和 XML-RPC。我已经研究过使用 protobuf-net 作为 WCF 端点,但我不太确定它是否是我正在寻找的。我真的很希望能够将所有内容都包含在我已经拥有的加密方案中,并重用许多其他代码。

我查看了 protobuf-net 中的基本 http RPC 示例,并一直在寻找一种方法来获取 byte[] 以供 RPC 使用。我愿意写一大段代码;我真的不知道从哪里开始。

有什么想法吗?

编辑:

这就是我通常发送状态消息的方式。这只是一些用 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); ..... }

有没有人知道如何将它包装起来并以类似的方式发送出去,并且能够对其进行加密等?

【问题讨论】:

  • 我一直认为:使用 protobuf-socket-rpc Java 项目中rpc.proto 的实现类似,并使用反射将所有内容推回...但我觉得我如果我这样做,我会错过一些东西。
  • 当您说“获取一个字节 [] 以供 RPC 使用”时-您能更具体一点吗?一个 byte[] 并不关心它是如何使用的......更具体地说,是什么步骤导致了头痛?您正在寻找什么用途? (我可能有一些想法,但我需要更清楚地了解问题)
  • 编辑添加额外信息。
  • 对;所以-我可以看到三个选项... 1:代码生成,在构建之前为您的界面编写c#; 2:元编程(即时编写接口的具体实现),以及 3:表达式树解析;我对每个步骤都有一些粗略的步骤,但是 - 优雅地做到这一点绝非易事。我确实在一段 tw 代码中有一个 bery basic RPC 服务器,可能可以对其进行调整......但是......它不是很漂亮(如果重写,我会做得非常不同)
  • 是的,我对选项 #2 做了一些小尝试,但它很快变得非常不优雅,这导致了我的问题。作弊的出路是使用评论中的 rpc.proto 并进行一些反思。不是最优的,但会是一个很好的临时解决方案。

标签: encryption udp rpc protocol-buffers protobuf-net


【解决方案1】:

我正在使用 zeroMQ 和 protobuf-net 来执行我的 RPC(.NET 到 .NET 和 python 到 .NET)。 ZMQ 是一个无代理消息传递框架,它允许您发送字节[],并以最少的代码构建各种简洁的架构。还有各种语言的绑定。查看他们的指南here

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多