c# - 代理-服务器拓扑的服务器推送与客户端拉取

标签 c# .net architecture networking

我需要创建一个由 2 个组件组成的系统:

  • 处理和存储数据的单个服务器。它还定期向代理发送更新

  • 安装在远程端点的多个代理。它们在(通常但不总是)长时间运行的操作中收集数据,并且这些数据需要到达服务器

我正在使用 C# .NET,理想情况下我想使用一种符合标准的通信方法(即理论上也可以与 Java 一起使用的方法,因为我们将来也可能会使用 Java 代理)。是否有替代 Web 服务的方法?我有哪些选择?

在我看来,我有 3 个使用 Web 服务的选项,并做出了以下观察:

  • 客户拉动
    • 代理不需要开放端口,因为它就像客户端一样
    • 需要轮询服务器以获取更新
  • 服务器推送
    • 在代理上打开端口,因为它就像一个服务器
    • 服务器必须轮询代理以获取结果
  • 混合型
    • 在代理上打开端口,因为它既像客户端又像服务器
    • 没有轮询;服务器在需要时推出更新,客户端在可用时发送结果

“混合”(代理既是客户端又是服务器似乎是显而易见的选择 - 但此应用程序通常会安装在企业和政府环境中,我担心它们可能有问题在代理处打开一个端口。我是不是在这方面想得太多了?

还有我遗漏的其他优点和缺点吗?

最佳答案

我们的 friend http://www.infrastructures.org以基于拉动的机制发誓:http://www.infrastructures.org/papers/bootstrap/bootstrap.html

他们更喜欢客户端拉取而不是服务器推送的一个主要原因是客户端可能会关闭,并且客户端必须(通常)应用服务器推送的所有操作。如果这个标准对你的情况不重要,也许他们的结论不会是你的结论,但我确实认为值得阅读他们论文的“推与拉”部分来自己决定。

关于c# - 代理-服务器拓扑的服务器推送与客户端拉取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3402090/

相关文章:

c# - 当验证需要数据库时,BL 与 DAL

c# - 如何使用 BinaryWriter 编写列表?

.net - Webpack 4 中与本地 js 文件(第三方库)捆绑的问题

.net - NLog 的 Couchbase

c# - 如何将项目的内容从 WPF 组合框拖放到 WPF 文本框

networking - 游戏服务器应该如何以定义的滴答率接收 udp 数据包?

architecture - 作者 "Platform Layer"是什么意思

c# - 如何打开与我的 MVC 项目相关的文本文件?

c# - Que Sera, Sera! Net Framework 4.0 是否支持 SQL 2008?

c# - 编辑来自另一个类的 PictureBox 的属性