繁体   English   中英

什么是最好的? 在套接字上轮询还是在等待Web服务超时?

[英]What is best? Polling on a socket or waiting for a web service timeout?

我有一个[网络方法]。 它的作用是在目录中查找* .dat文件,其中目录路径由客户端调用[web方法]提供。

此刻,客户端调用[web方法],代码进入循环检查所有文件。 如果找到任何内容,它将返回列表。 它显然也可能超时,并且这样做时我的客户端代码会捕获错误并重新调用[web方法]。

另一种处理方法是在客户端上打开TCP套接字,它将向服务器上的接收套接字服务发送“我在这里”。 服务器将根据客户端提供的条件查找* .dats的存在。 如果找到1个以上的文件,它将发回“ 1”。 如果没有文件,它将返回“ 0”。 如果客户端从服务器接收到“ 1”,则我的客户端应用程序将调用[web方法]以检索可用列表。

我知道我可以使用WCF进行回调,但是我想明确地看一下这两个选项1st。

我也知道SignalR,但是我发现如果我使用的是Windows 8之前的操作系统,则SignalR将恢复为长轮询,而不是Web套接字。

我可以理解,采用第一种方法会将“重点”放在服务器上,而采用第二种方法将平均地分配“压力”,但将涉及重复的TCP调用。

我已经进行了测试,而且似乎都拥有自己的功能。

任何人的任何意见都将受到感激。

我的目标是速度,低内存消耗,易于代码管理,服务器与客户端之间的松耦合-基本上是显而易见的...

谢谢...

如果您正在寻找松散耦合,则某些实现可能会使用Message Queue。 尽管这意味着您将需要更改架构的某些部分。

我建议将其更改为“推送”方法,而不是轮询。

我的方法是这样的:

  • 每个类型的每个应用程序/服务/客户端都会注册以接收来自服务器的更新。
  • 您的服务可以使用FileSystemWatcher来检查文件。 让.NET Framework做一些肮脏的工作,不要手动轮询。 :-)
  • 每当有新文件到达时,该服务就会向所有订阅者发布一条消息。

(可选)您可以实现一个消息调度程序服务,该服务负责客户端的消息订阅。 这会将订阅管理与您的文件服务分开,这对我来说更干净。

实施细节可能因您选择的技术而异。

在工作中,我们有与您类似的场景,为此我们正在使用WCF服务,这些服务开箱即用地支持Microsoft消息队列(MSMQ),并且为了易于使用而支持NServiceBus框架。 NServiceBus使建立这些发布者/接收者方案变得容易设置。

当然,还有许多其他的Message Queue框架可以使用,这就是我个人的良好经验。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM