我应该如何在.NET中实现分布式远程方法调用系统?

Chr*_*art 5 .net c# udp tcp rmi

原帖

我如何实现分布式远程方法调用系统?

我正在尝试创建以下内容:

  • 主服务器跟踪单个"主机".
  • 主机可以使用基于代理对象接口的编程风格与网络上的其他主机通信,例如: var result = remoteHost.MyMethod(5);

我尝试过使用像SuperPoolScs这样的RMI库,但它们有一些基本问题:

  • SCS仅支持服务器 - >客户端或客户端 - >服务器通信,无客户端 - >客户端通信.
  • 据我所知,SuperPool只支持相同,虽然这张图片会另有说明,我在文档中找不到有关如何执行此操作的任何内容: 在此输入图像描述

不同之处在于客户端上的任何组件也可以与其他客户端上的组件通信,而不是仅与客户端 - >服务器或服务器 - >客户端通信.

您如何建议我实施此项目(可能使用这些现有解决方案作为基础),还是有其他现有解决方案可能有效?

更广泛的例子

这是我正在尝试做的图表: 在此输入图像描述

重要说明:客户端不会相互连接.

处理:

  1. Client1连接到Server
  2. Client2连接到Server
  3. Client1在Client2上调用方法,而不知道Client2的组件是否存在于Server,另一个Client或其自身上.

这个想法与SuperPool所做的一样,除了允许客户端 - >服务器 - >客户端通信路径在第二个客户端上调用方法.

Ern*_*rno 3

尽管ZeroMQ级别相当低,但它支持双向通信并具有.NET 支持,并且可以在 nuget.org 上获取

您可以在 DEALER/ROUTER 或 DEALER/DEALER 套接字对上多路复用许多双向对话,并且任何一方都可以发起对话。

请注意,ZeroMQ 并没有提供方法调用所需的一切;您必须创建自己的协议或使用现有协议并实施它。

Salt 和 Cloudless 都构建在 ZeroMQ 之上,提供远程方法调用。

ZeroMQ 促进了非常强大的异步套接字(以及更多) 路由消息是绝对可能的。如果您将ZeroMQ 指南中的 Ventilator 和 Sink结合起来 ,您就非常接近您想要实现的目标。

请注意,您仍然需要实现实际的协议和方法调用。