代码之家  ›  专栏  ›  技术社区  ›  Cocowalla

代理服务器拓扑的服务器推送与客户端拉送

  •  8
  • Cocowalla  · 技术社区  · 15 年前

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

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

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

    我使用的是C.Y..NET,理想的是,我希望使用一个符合标准的通信方法(也就是说,它也可以与Java一起工作,因为将来我们也可以使用Java代理)。Web服务还有其他选择吗?我有什么选择?

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

    • 客户拉动
      • 代理不需要开放端口,因为它的行为类似于客户端
      • 需要轮询服务器以获取更新
    • 服务器推送
      • 在代理上打开端口,因为它的作用类似于服务器
      • 服务器必须轮询代理的结果
    • 混合的
      • 在代理上打开端口 二者都 客户机和服务器
      • 无轮询;服务器在需要时推出更新,客户机在可用时发送结果

    “混合”(代理都是客户) 服务器似乎是一个明显的选择——但是这个应用程序通常会安装在企业和政府环境中,我担心他们在代理上打开端口时可能会遇到问题。我是不是太沉溺于此了?

    我遗漏了其他的利弊吗?

    4 回复  |  直到 15 年前
        1
  •  5
  •   sarnold    15 年前

    我们的朋友 http://www.infrastructures.org 以拉为基础的机制发誓: http://www.infrastructures.org/papers/bootstrap/bootstrap.html

    他们更喜欢客户机拉服务器推送的一个主要原因是客户机可能停机,客户机(通常)必须应用服务器推送的所有操作。如果这个标准在你的案例中不重要,也许他们的结论不是你的结论,但我认为值得你自己阅读他们论文中的“推与拉”部分来决定。

        2
  •  3
  •   Remus Rusanu    15 年前

    我想说,在当今这个时代,你只能认真考虑拉技术。push的问题在于,客户机通常隐藏在网络地址遍历设备(nat)后面,如无线路由器、宽带调制解调器或公司防火墙,而客户机往往无法从服务器访问。

    建立出站连接(“phone-home”),特别是在诸如http/https等众所周知的端口上,基本上可以假设为“可能”,即使在大多数受限的网络下也是如此。

        3
  •  2
  •   Pace    15 年前

    如果您使用某种消息传递服务器(JMS为Java,不确定C语言),那么您的消息服务器是唯一需要打开端口的服务器,并且可以从代理到消息服务器和从服务器到消息传递服务器双向通信。这将允许您在不需要打开代理服务器上的端口的情况下完成混合模型。

        4
  •  2
  •   Shady M. Najib    15 年前

    imho,我觉得你最好的选择是拉选。它可以满足您的主要系统需求,如下所示:

    第一部分:数据需要到达服务器,这显然可以通过调用将数据作为参数发送的Web方法来完成。

    第二部分:(服务器定期向代理发送更新):您仍然可以通过客户端(常规)拉取,通过某种Web服务方法“请求”自上次拉取以来的更新(某种S时间戳来获取它错过的更新)。

    混合方法在我看来有点奇怪,因为我认为代理是系统的一部分,可能经常“离线”,如果失败服务器会怎么做?这通常是一个困难的问题/决定,特别是如果您不确定这是一个预期的“离线”还是一个系统/网络故障。等