WCF,处理来自多个服务器的同时请求

时间:2013-05-09 16:41:20

标签: c# wcf c#-4.0 distributed-computing

我有一块工作,它已分成更小的块。我想将每个块分配给NumberCruncher的实例(每个实例将托管在一个唯一的EndPoint上,并且将在服务器上的特定线程上运行)。然后,在以txt文件格式返回结果之前,指定EndPoint处的NumberCruncher实例将进入并处理由客户端代理传递给它的那些数字。

从客户端来看,我假设我需要保留2个线程安全列表,1包含链接到NumberCruncher实例的EndPoints,它们等待返回结果。 NumberCruncher实例的第二个等待分配更多工作?

关于向这些列表添加项目,如何处理来自服务器的多个请求?一次只能添加一个,所以我假设客户端需要向服务发送一条消息,说“是,您已成功添加到列表中,现在停止请求添加。”?

修改

我目前正在尝试对我收集的时间序列进行一些分析。我编写了一个程序(Number Cruncher),它分割了我想要检查的不同参数,并将它们分配给不同的线程(由我的电脑中的核心数决定)。然后每个线程使用指定的输入运行Number Cruncher。不幸的是,即使使用所有核心,这也会在我的电脑上花费大量的时间。所以我想在几个pc(服务器)上运行相同的程序,并编写一个程序,将工作分配给所有服务器。每次模拟大约需要1小时。所以我要看520小时的计算时间(即单个电脑不可行)。

1 个答案:

答案 0 :(得分:1)

我认为你在想这个。

在WCF中,您可以控制实例数(单个,每个会话和每个请求)以及实例是单线程还是多线程。但不要超过请求的线程亲和性。

而且你不需要,在我看来你应该只配置每个请求的实例(很大程度上取决于编码和状态管理的细节)。

您可以限制服务器以实现最大容量和可接受的延迟。如果你不需要,不要乱用线程管理。


修改

之后

您可以使用WCF,但它是分布式计算问题,存在专用软件。

您可以将工作PC作为服务器运行,这似乎是您当前的方向。但我会:

  • 运行1分割工作并管理工作项的服务器
    • 需要检查“逾期”项目并重新发布
  • 运行多个客户端,可以要求尽可能多的工作项,因为他们有核心
    • 需要配置为最大负载。可以是核心+ 2或核心-1