要求澄清分散式软件服务通信机制

时间:2012-12-12 20:41:21

标签: ccr robotics-studio

我从http://social.msdn.microsoft.com/Forums/en/roboticsdss/thread/3169a539-f536-4b9d-bae7-01212a857660以及我自己使用和调试DSS服务的经验中看到,DSS利用克隆进行节点内通信,克隆+序列化进行节点间通信。我请求你帮助理解这个机制。对于内部节点通信,我理解DSS仅使用克隆,因为我们在同一进程空间中传输对象(不需要通过网络进行通信),并且我们不希望任何不需要的共享内存依赖性。但是,在节点间通信期间,为什么我们需要克隆+序列化?根据我对序列化的理解,当序列化对象时,序列化结束时得到的输出完全独立于被序列化的对象,可以单独用于构造新对象。此外,在序列化期间,我认为我们不会更新原始对象,我们只是要从中读取。在这种情况下,单独序列化是不够的?为什么我们需要在序列化之前进行克隆?

谢谢,

Venkat

1 个答案:

答案 0 :(得分:0)

通常,DSS使用生成的代理类型序列化消息,因此如果使用原始类型构造消息,则在序列化之前,它将首先转换为代理类型(隐式地是克隆操作)。另一方面,如果使用代理类型构造消息,则在序列化之前没有单独的克隆步骤(为合作伙伴使用代理类型的一个很好的理由)。

如果消息类型(或更严格的消息体类型)实现了IDssSerializable,那么行为取决于该类型的特定实现(因为这会绕过通常的代理机制)