【问题标题】:How to structure a client-server application with 'push' notifications如何使用“推送”通知构建客户端-服务器应用程序
【发布时间】:2011-04-26 21:56:01
【问题描述】:

编辑:我忘了包括 Web 应用程序的主要候选者:JSON over HTTP/REST + Comet。它结合了其他人的最佳功能(下)

  • Persevere 基本上将我需要的一切都捆绑在服务器中
  • Java 等的重点肯定是 Comet 服务器,但使用/编写客户端也不会太难。

我正在着手开发一个应用程序,其服务器保存数据,客户端执行会影响此数据的操作,因此需要所有感兴趣/订阅的客户端进行某种通知。

第一个客户端可能会用 WPF 编写,但我们可能需要添加用其他语言编写的客户端,例如一个 Java(Swing?)客户端,可能还有一个 Web 客户端。

实际问题:我应该使用什么协议来实现它?与 JS、Java 和 .NET(准确地说是 C#)客户端集成有多容易?

我可以使用多个接口/协议,但总体而言,使用可互操作的接口/协议会更容易。鉴于互操作性很重要,我研究了几个选项:

  1. JSON-RPC
    • 轻量级
    • 支持通知
      • 我能找到的唯一 .NET 库 Jayrock 不支持通知
    • 与 JS 配合得很好
      • 也适用于基于 XML 的内容(甚至可能是二进制协议),但由于本机支持,这可能会更有效
  2. Protobuf/Thrift
    • IDL 可以轻松地以每种语言输出模型类
    • 似乎不支持通知
    • Thrift 自带 RPC,但 protobuf 没有
    • 不知道 JS
  3. XML-RPC
    • 够简单,但不支持通知
  4. SOAP:我什至不确定这个;我还没摸透这个。
    • 看起来相当复杂
  5. 消息队列/PubSub 方法:严格来说不是协议,但可能适合
    • 我对它们几乎一无所知,迷失在流行语中`-- JMS? **MQ?
    • 也许与上面的一些 RPC 机制相结合,尽管这可能不是绝对必要的,而且可能是矫枉过正。

当然,欢迎使用其他选项。

【问题讨论】:

    标签: interop notifications rpc


    【解决方案1】:

    我偏爱您建议的 pub/sub 设计。我会看看 ZeroMQ。它绑定到 C#、Java 和许多其他平台。

    绑定列表:http://www.zeromq.org/bindings:clr

    我还在 ZeroMQ 开发列表中找到了这个对话,它可能会回答您对多个客户端和 ZeroMQ 的一些问题:http://lists.zeromq.org/pipermail/zeromq-dev/2010-February/002146.html

    【讨论】:

      【解决方案2】:

      如果您想轻松地跨网络向客户端发布事件,您可能希望查看XMPP 标准。 (被 Jabber 和 Google Talk 等使用。)

      查看publish-subscribe 功能的扩展。

      有多个libraries in different languages including C#, Java and Javascript

      【讨论】:

        【解决方案3】:

        正如提到的 XMPP,SIP 具有类似的功能。 This 可能更适合您。

        【讨论】:

          【解决方案4】:

          您可以使用 SOAP over HTTP 来修改服务器上的数据,并使用 SOAP over SMTP 来通知订阅的客户端。

          服务器对订阅一无所知,客户端通过超时调用服务器以跟踪他们感兴趣的更新,使用 XML-RPC、SOAP(使用 WSDL 生成),或者如果不需要,只需使用 HTTP GET传回有关跟踪的复杂数据。

          【讨论】:

            【解决方案5】:

            我们为此使用Servoy。它自动向 web 客户端和 java 客户端广播数据。我不确定是否可以将广播发送到其他平台,您也许可以在他们的论坛上找到答案。

            【讨论】:

              猜你喜欢
              • 2012-09-10
              • 1970-01-01
              • 2013-08-01
              • 2015-09-11
              • 2016-01-10
              • 1970-01-01
              • 2018-01-22
              • 1970-01-01
              • 2013-02-07
              相关资源
              最近更新 更多