我们正在开发一个Windows Forms应用程序,它将安装在大约1,000个员工的PC上。用户可以同时运行应用程序的多个实例。客户端都在一个内部网上。
应用程序中的更改可能会导致数据库记录更改,而这些更改又必须传达给其他客户端,以便更新其UI。
我们的团队已经讨论了两种不同的方法:
1。多播数据包
源客户端修改记录,然后发送一个多播数据包,其中有效负载已发生变化。其他客户端收到此信息并获取指定的数据。我们需要考虑未收到数据包的情况,然后再回到主动检索数据的情况。
此时我的问题是客户如何知道它没有收到数据包? (不知道你不知道什么)这使我们在数据库中带有时间戳的某种事件日志,并且UI控件跟踪它们上次更新的时间。他们成为焦点,检查他们的时间戳,并根据需要进行更新。
其他人说UI元素只会在每次聚焦时重新加载(想想outlook中的模式,使用CAB将控件带到堆栈工作区的前面)。并且多播将更新其当前上下文已更改的客户端。如果他们错过了,他们会使用陈旧的数据,直到他们改变模式并回来。
2。 WCF和回调
客户端通过tcp绑定向WCF合同注册回调。与此相关的主要技术问题是服务器维护许多开放套接字。我们已经了解了它是如何在传统意义上不开放的,它最多可以睡90秒,然后在那时重新建立。我们还了解了Windows 2003 Server计算机可以处理的最大打开连接数,以及如何在注册表中修改它。
如果我们有1000个与服务器的开放套接字连接,这会分崩离析吗?
如果有人遇到同样的情况并尝试或评估了WCF方法,我们很乐意听到。
答案 0 :(得分:1)
我没有实现这样的情况。但是,我认为其中一个双工绑定不一定会有很高的开销。
这一切都取决于服务器需要将多少信息发送回客户端。我了解到你说这些信息将用于他们更新他们的用户界面。然而,他们似乎可能并非都需要同时获得相同数量的信息。例如,如果有关西部地区的信息发生变化,所有1000个客户可能想知道有变化,他们可能都希望更新有关西部地区的汇总级信息,但可能只有1/4可能需要看到变化的细节。
如果是这种情况,那么我建议回调仅提供有关 更改的信息,主要是在汇总级别。让那些对变更细节感兴趣的客户询问详细信息。您甚至可以提供前一个或两个层次结构的所有详细信息,然后对于其余部分,只需包含“在时间更改”的信息。这样,根据特定客户端查看的层次结构级别,客户端可以询问或不询问。
如有必要,您可以一起批量更新。如果客户端只需要每秒更新一次,那么您可以累积最后一秒的更改并立即将它们全部发送。
您可能还想对某些任务使用某些Peer to Peer绑定。也许您所在行业的某个特定领域的客户想要了解彼此正在做些什么 - 这类事情。