服务器-客户端的推送/拉取连接是如何工作的?

3
我非常感兴趣了解金融数据如何从服务器传递到客户端。我经常听到术语“推拉(push-pull)”被使用。我想知道是否有人能够举一个例子(最好是在Java、C#或JavaScript中),说明这实际上是如何实现的?每当我在家里写业余爱好项目时,我经常会查询一个包含价格的URL,并在while(true)循环中不断调用它,即使价格没有改变也是如此,还会加入一个thread.sleep(x)的线程等待时间。
提前感谢。

金融页面如何更新自己? - Raynos
4个回答

3
我不知道你所说的“流式金融数据”的含义,但是推拉模式的概念并不仅限于金融领域 :)
一般来说,拉取策略意味着客户端通过预定义的通信渠道主动获取数据(在您的情况下是到已知URL的套接字),并轮询该通道以获取新信息。
相反,您有推送策略,其中您将被通知任何更改,并提供通信渠道并向连接的合作伙伴注册它。例如,您有一个Web服务,您的连接合作伙伴将根据需要向该Web服务发布信息。请参见http://en.wikipedia.org/wiki/Observer_pattern了解此概念。
希望这有点帮助。

2
如果客户端使用HTTP工作,推送总是由客户端发起,即客户端请求新的更新,服务器发送它们。如果客户端是轻量级客户端(即在浏览器中运行的应用程序),现代方法是使用AJAX在不刷新页面的情况下检索数据。但是,再次强调,这种主动性在客户端,但用户并不会看到它。它是使用javascript定期进行的。
最“实时”的方法是使用HTTP隧道技术:客户端执行HTTP GET到特殊URL映射到servlet,该servlet不关闭连接。它只保持打开状态。当它有要发送给客户端的内容时,它写入流。因此,您可以获取服务器到客户端的推送,但仍然是由客户端执行了初始连接。

Websockets和eventsource是实时的。 - Raynos
你好,这种服务器到客户端的 HTTP GET 方法有专业名称吗?谢谢。 - Jean

0
你正在进行拉取操作。拉取是指客户端请求服务器数据,服务器对该请求进行响应。
如果服务器在接收到新数据后立即向您发送数据,那就是推送
因此,区别在于:推送由服务器发起,而拉取由客户端发起。
金融数据通常使用像TIBCO Rendezvous这样的软件进行传输。发布者将消息发送到守护进程,订阅该主题的侦听器从守护进程获取消息。

0

这是两种基于Web的PUSH技术。

至于浏览器支持:

  • Chrome/Safari/Firefox6都支持这两种技术。
  • Opera支持EventSource和Websockets,但默认情况下后者被禁用。
  • Firefox 4支持Websockets,但默认情况下被禁用。
  • IE<10都不支持,IE10可能会支持其中一种。

还有许多拉取技术,包括HTTP和ajax。


谢谢(我尝试回复您的第一条评论,但无法工作) - Jean
有没有Java或C#的PUSH技术? - Jean
@David,它们是Java或C#,您只需要实现服务器。谷歌搜索.NET WebSocket或Java Websocket。这些都是完全语言中立的。 - Raynos

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接