如何使用“推送”通知构建客户端 - 服务器应用程序

时间:2010-10-18 12:06:51

标签: interop notifications rpc

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

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

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

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

实际问题(s):我应该使用什么协议来实现这个目标?与JS,Java和.NET(正是C#)客户端集成有多容易?

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

  1. JS​​ON-RPC
    • 轻质
    • 支持通知
      • 我能找到的唯一.NET库,Jayrock不支持通知
    • 适用于JS
      • 也适用于基于XML的东西(甚至可能是二进制协议)但是由于原生支持,这可能会更有效率
  2. 的Protobuf /节俭
    • IDL可以轻松地吐出每种语言的模型类
    • 似乎不支持通知
    • Thrift带有开箱即用的RPC,但是protobufs没有
    • 不确定JS
  3. XML-RPC
    • 很简单,但不支持通知
  4. SOAP:我甚至不确定这个;我还没有弄清楚这一点。
    • 看起来相当复杂
  5. 消息队列/ PubSub方法:不是严格的协议,但可能适合
    • 我对他们一无所知,迷失在流行语中 - JMS? ** MQ?
    • 也许与上面的一些RPC机制相结合,虽然这可能不是绝对必要的,也可能是过度杀伤。
  6. 其他选择当然是受欢迎的。

5 个答案:

答案 0 :(得分:1)

我偏爱你建议的酒吧/子设计。我来看看ZeroMQ。它绑定了C#,Java和许多其他平台。

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

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

答案 1 :(得分:1)

如果您希望轻松地向网络上的客户发布事件,您可能希望查看XMPP标准。 (除其他外,由Jabber和Google Talk使用。)

查看publish-subscribe功能的扩展程序。

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

答案 2 :(得分:1)

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

答案 3 :(得分:1)

我们使用Servoy。它为Web客户端和Java客户端进行自动数据广播。我不确定是否可以将广播发送到其他平台,您可以在论坛上找到答案。

答案 4 :(得分:0)

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

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