如何建立可互操作的“推送”Web服务?

时间:2011-01-30 00:05:36

标签: .net wcf web-services interop

我们遇到了一个问题,我们有一些数据,例如股票价格,例如清酒,我们希望提供一个服务,当价格变化很大时通知客户。

我们需要此服务与跨平台边界的尽可能多的客户端互操作。因此,基于标准似乎是一个很好的方法。

要求客户轮询我们的服务似乎很疯狂,并且很快就会压倒我们的服务器。

有没有基于标准的方式来做pub-sub或某些基于事件的方式来通知客户有趣的事件?

有WS-Eventing,感觉它没有广泛的框架支持。

3 个答案:

答案 0 :(得分:2)

查看Comet,Ajax推送等:http://en.wikipedia.org/wiki/Comet_(programming))

这是针对JavaScript的,但可以适用于任何类型的异步客户端。客户端“轮询”服务器。然后服务器保持连接直到有数据。然后,该过程重复进行。但是,您必须考虑客户端超时。

没有客户端实现自己的服务,这就是你最接近推送机制的问题。我不确定保持所有这些开放连接或客户端进行真正的轮询是否成本更高。总的来说,我会说每次民意调查之间的时间越长,传统的民意调查就越好。虽然如果您的服务器可以处理额外的连接,那么通知延迟会更少。

答案 1 :(得分:2)

为了他人的利益,我想提出使用XMPP来实现这一目标的想法。 XMPP(以前称为Jabber)是一种IETF标准,它有点像电子邮件,可以使用基于XML的可扩展协议实现基于推送的即时消息。它还提供用于通道加密的TLS和用于身份验证的SASL。 XMPP也是Google Talk的基础。可以使用Jabber等开源软件运行XMPP服务器,并且可能会使用谷歌的Talk基础设施来传递消息。

XMPP libraries来简化客户端和服务器开发。

答案 2 :(得分:1)

我们可以扭转服务主机和客户端的典型角色。我们将为客户提供WSDL合同,他们需要托管符合该合同的基本配置文件Web服务。将有一个简单的Web服务方法,我们在客户端的角色,但服务的提供者将调用,以通知客户一个有趣的事件。