【问题标题】:Best way for interprocess communication in two ways between a server and a client在服务器和客户端之间以两种方式进行进程间通信的最佳方式
【发布时间】:2013-09-01 22:12:48
【问题描述】:

我有N 工作进程和一个启动这些工作进程的服务器进程。现在我希望我的工作人员通过两种方式与服务器通信(WorkerK --> ServerServer --> WorkerK)。

最好的方法是什么?

我读到了MemoryMappedFilesNamedPipes 和其他一些信息。我应该选择哪一个?为什么?

我的项目是 Windows 窗体应用程序。

【问题讨论】:

  • 为什么不使用普通的旧网络套接字?见here
  • ZeroMQ 是其中一种选择(如果你问我,它是一个非常好的选择)。
  • 我想过使用套接字,但我试图寻找对用户更友好的东西并满足更多的解决方案:)
  • @DavidBrabant 非常有趣的工具:P 谢谢

标签: c# multithreading process


【解决方案1】:

如果您对沟通一无所知,请选择现成的解决方案。双向 WCF 通道就是一个很好的例子。请参阅What You Need To Know About One-Way Calls, Callbacks, And Events 了解入门。阅读 WCF Overview(包括所有链接!)了解 WCF 的介绍。

如果您更精通沟通,那么您应该更清楚地定义问题:

  • 使用什么身份验证模型? Kerberos、证书、密码,没有?
  • Intranet 还是 Internet?
  • 谁在监听?您自己的服务、http.sys、WCF 激活?
  • 还有最基本的问题:同步还是异步?我并不是说 async 作为异步 API,而是在队列消息导向协议中使用异步。

【讨论】:

  • 无身份验证。只有简单的工作进程,都在本地机器上,所以是内网。但所有的应用程序都是 Windows 窗体应用程序。它是一个执行一些 CPU 消耗计算的程序,因此有一些不同的进程同时运行,它们由一个主进程协调。所以它们是异步工作的,但我想在它们之间进行一些通信以共享一些数据。
  • 为什么需要单独的进程?为什么这些不能是同一进程中的线程?
  • 你为这个小小的好处付出了巨大的代价。 SetThreadAffinityMask 有什么问题
  • 如果您不喜欢编写自己的有线协议,我强烈建议您使用 WCF。您可以将它与快速传输(管道或套接字)一起使用,而无需使用 HTTP 开销。
  • 在队列主干(0mq、activemq、msmq)上构建的解决方案肯定会更优雅,并且将来(可能)更容易横向扩展。但现在可能有点矫枉过正,至少因为部署/管理要求(安装、配置)。
猜你喜欢
  • 1970-01-01
  • 2013-01-02
  • 1970-01-01
  • 1970-01-01
  • 2015-07-13
  • 1970-01-01
  • 2013-06-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多