我们遇到了一个问题,我们有一些数据,比如说股票价格,我们想要提供一个服务,当价格变化很大时通知客户。
我们需要这个服务能够与尽可能多的客户端进行互操作,跨越平台边界。因此,基于标准的似乎是一种很好的方式。
让客户端轮询我们的服务看起来很疯狂,而且这是一个让我们的服务器很快不堪重负的秘诀。
有没有一种基于标准的方法来做发布-订阅,或者一些基于事件的方法来通知客户端感兴趣的事件?
有WS-Eventing,它感觉没有广泛的框架支持它。
发布于 2011-02-01 14:49:41
为了其他人的利益,我想提出使用XMPP来实现这一点的想法。XMPP (以前的Jabber)是一个IETF标准,它的工作原理有点像电子邮件,使用基于XML的可扩展协议来实现基于推送的即时消息。它还提供用于通道加密TLS和用于身份验证的SASL。XMPP也是Google Talk的基础。可以使用诸如Jabber之类的开源软件运行XMPP服务器,并且在紧要关头还可以使用Google的Talk基础设施来中继消息。
有一些XMPP libraries可以简化客户端和服务器的开发。
发布于 2011-02-01 05:04:22
查看Comet、Ajax推送等:http://en.wikipedia.org/wiki/Comet_(programming)
这是特定于JavaScript的,但是可以很好地与任何类型的异步客户端一起工作。客户端“轮询”服务器。然后,服务器保持连接,直到有数据为止。然后,这个过程会重复进行。但是,您必须考虑到客户端超时。
如果不让客户端实现自己的服务,这将是最接近于推送机制的方式。我不确定是保持所有这些开放连接的成本更高,还是客户端进行真正的轮询成本更高。一般来说,我会说每次轮询之间的时间间隔越长,传统轮询的表现就越好。不过,如果您的服务器能够处理额外的连接,您将有更少的通知延迟。
发布于 2011-02-01 03:08:51
我们可以颠倒服务主机和客户端的典型角色。我们将为客户端提供WSDL约定,并且它们将需要托管符合该约定的基本概要Web服务。将有一个简单的web服务方法,我们作为客户端的角色,但作为服务的提供者,将调用该方法来通知客户感兴趣的事件。
https://stackoverflow.com/questions/4840296
复制相似问题