服务器-客户端推/拉连接是如何工作的
How do server-client push/pull connections work?
我对金融数据如何从服务器流到客户端很感兴趣。我经常在这里使用"推拉"这个词。我想知道是否有人能给我一个例子(最好在Java, c#或Javascript)这是如何实现的?每当我在家里编写业余爱好项目时,我经常最终查询一个URL(包含价格)并在while(true)循环中不断调用它,使用thread.sleep(x),即使价格没有变化。
Thanks in advance
我不知道你说的'流式财务数据'是什么意思,但推/拉的概念并不局限于金融部门:)
一般来说,pull策略意味着客户端通过预定义的通信通道(在您的例子中是一个到现有和已知URL的套接字)主动获取数据,并轮询该通道以获取新信息。
与此相反,您有推送策略,其中您会收到任何更改的通知,您提供通信通道并将其注册到连接的合作伙伴。例如,你有一个网络服务,你的连接伙伴将在他认为合适的时候向该网络服务发布信息。这个概念见http://en.wikipedia.org/wiki/Observer_pattern
如果客户端在HTTP上工作,推送总是由客户端发起,即客户端请求新的更新,服务器发送它们。如果客户端是瘦客户端(即在浏览器中运行的应用程序),现代的方法是使用AJAX来检索数据而不刷新页面。但是主动权还是在客户端,只是用户没有看到而已。它是使用javascript在预定的基础上完成的。
最"实时"的方法是使用HTTP隧道技术:客户端对映射到servlet的特殊URL执行HTTP GET,而不会关闭连接。它只是让它打开。当它有东西要发送给客户端时,它会写入流。因此,您得到了服务器到客户机的推送,但仍然由客户机执行初始连接。
你在拉。pull是指客户端向服务器请求数据,服务器对该请求进行操作。
如果服务器在接收到新数据时发送给你数据,那将是push。
所以区别在于:推送是由服务器发起的,而拉是由客户端发起的。
财务数据通常通过TIBCO Rendezvous等软件传输。发布者将消息发送给守护进程,订阅该主题的侦听器从守护进程获取消息。
- Websockets
- EventSource
这是两种基于web的PUSH技术。
对于浏览器支持:
- Chrome/Safari/Firefox6都支持。 Opera支持EventSource和Websockets,但默认禁用后者。 Firefox 4支持websockets,但默认禁用。
- IE10都不支持,如果幸运的话,IE10可能会支持一个
有许多拉取技术,包括HTTP和ajax。
- Javascript:selenium Web驱动程序isDisplayed()不工作
- jQuery UI自动完成突然停止工作
- AngularJS UI路由器不能像ng路由器那样工作
- HTML5音频加载和播放获胜'我不能在iPad上工作
- JavaScript打印功能使日历停止工作
- Javascript.getHours()工作不正常
- 为什么这在IE中的工作方式与在Firefox中不同
- 视频HTML没有'无法在Internet Explorer 11上工作
- 扩展移相器按钮类不工作
- Firebase迁移-简单的Firebase.set没有'不再工作了——旧的还是新的
- 谷歌地图不是以HTML显示,而是在JS Fiddle上工作
- 正在尝试使用if和else添加类,但无法正常工作
- Jquery FadeIn FadeOut 只工作一次
- Foreach无法在Typescript中工作
- 另一个ajax调用中的Jquery ajax调用在for循环中没有按预期工作
- 为什么不是't窗口.恢复正常工作吗?(javascript/jquery)
- JS可以在Chrome中工作,但不能在Firefox中工作
- ajaxToolkit PopupControlExtender不工作.过时的
- HTML标记在脚本标记中工作
- 在JavaScript中的类中,push和concat的工作方式有何不同