问题标签 [server-push]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
javascript - 在页面正文中保持 jQuery .getJSON() 连接打开并等待?
我正在编写一个基本的推送消息系统。一个小的变化导致它停止正常工作。让我解释。在我的原始版本中,我能够将代码放入文档中,如下所示:
这工作得很好,即使服务器返回 null(它会在 2 分钟超时之后)也会保持连接打开。它只会无限期地一遍又一遍地调用 getJSON 函数。快乐的熊猫。
现在,我必须将代码段放在标签之间。访问 $(document).ready() 函数几乎是行不通的。
这工作......一段时间。此后不久,它将停止调用 check4Updates 并进入无限循环并使用 100% 的处理器时间。
我正在尝试获取它,以便重复调用 check4Updates 直到页面关闭。如果有人对为什么我的简单更改不再按预期运行有任何见解,请告诉我。感谢您花时间阅读并帮助我。
最好的问候,范阮
architecture - 客户端(桌面应用程序)提取数据......但我希望服务器(网络应用程序)推送数据
我有一个客户端-服务器应用程序——其中服务器本质上是一个 ASP .NET Web 应用程序,而分布式客户端是桌面应用程序。
客户端需要从服务器接收一些数据 - 当客户端有新数据时。现在,这样做的方式是 - 客户端每隔 x 分钟(比如 2 分钟)不断查询 Web 服务,并不断检查客户端是否有新数据。
理想情况下,它应该工作的方式是桌面应用程序应该在更新可用时接收更新,它不需要从服务器中提取;相反,服务器应该能够推送到客户端。
我该如何去做——考虑到解决方案的架构——Web 应用程序需要将数据推送到同一网络(LAN)中的桌面应用程序(客户端)?
php - 如何一次实现服务器推送更多值?
为不止一件事实现服务器推送的最佳方法是什么。
假设我只想更新用户状态,所以我可以在 1000 毫秒内定期轮询服务器的状态并更新页面。
我能找到的另一种方法是服务器等待 30 秒,同时它检查是否有任何更改,如果找到,服务器将响应推送回客户端,更新页面然后进行另一次轮询。
但是我将如何实现它来检查网站上的 10 件事情呢?例如,如果我希望 stackoverflow 在有人投票时刷新问题投票,但我能想到的唯一方法是
向服务器询问每个问题的投票 -> 服务器回复页面上每个问题的投票
但是我如何才能知道哪些问题的投票发生了变化?我可以发送所有当前投票,然后让服务器比较值并仅回复那些确实发生变化的投票,但我认为在检查 30 个值时这样做是非常无效的。
一个例子就是Facebook,几乎所有内容都通过服务器推送刷新,但服务器如何找出发生了哪些变化,哪些没有发生变化?
我发现的所有内容(包括我的“Ajax 模式”一书)只解释了如何轮询一个值,但我没有找到任何如何一次轮询多个值(比如超过 10 个)。
tomcat - 哪种方式最好,在 Java Servlet 中实现 Comets
我想编写一个使用 Comets 模式的应用程序 - 这是一个可以在服务器上发生事件时响应的请求,而不仅仅是对即时请求的响应。
用于此目的的最简单的应用程序服务器是:
1) Tomcat 及其 NIO 包
2) Jetty 及其延续
3) 或其他替代方案
我认为主要标准应该是:
- 易用性
- 可靠性
- 速度
php - 从 php 将代码“推送”到 javascript
我目前有一段 jquery/js 代码,每隔几秒 (5) 运行一次 GET 请求,寻找可能进来的新数据。
有没有什么方法可以让 PHP 在有新帖子时“推送”或向 javascript 代码发出信号,而不是每隔几秒钟检查一次是否有新帖子出现?
另一个例子:我正在为用户调整图像的大小。我想向用户显示有关正在进行的过程的实时数据 - 显示诸如“上传到服务器”、“调整图像大小”、“存储图像”之类的消息。
对这样的事情有任何帮助吗?
ajax - 如何从网页调用此 Comets 应用程序
我已经实现了http://tomcat.apache.org/tomcat-6.0-doc/aio.html中显示的两个类,它提供了一个使用 Tomcat 彗星实现的信使应用程序。
如何将其连接到 Web 界面并显示某些内容。
我认为这些是基本步骤(我不知道细节)。
- 我应该创建一些传统事件 - 按钮单击或 AJAX 事件 - 调用 ChatServlet 并传入 CometEvent(以某种方式) - 也许 BEGIN
- 从那时起,每次我想使用 READ 事件作为输入参数向客户端发送一些东西时,我都会让我的代码调用事件方法。
我复制了以下两个类:
api - 服务器推送技术的 API 模型 (COMET)
我正在向 CppCMS 添加对服务器端事件的支持。我了解在通信级别上做什么的技术部分:客户端发送长轮询 XmlHTTPRequest,并等待响应,服务器接受连接并且在服务器端事件发生并将响应发送给客户端之前不响应。客户重复该过程。
但是,对于大多数 Web 开发人员来说,这太“低”了。有很多问题:我如何管理事件,我如何管理连接等等。
我想到了两种可能的模型:
定义了一些命名事件和服务器端,例如“134 号聊天室中的新消息”;当请求接受时,服务器端应用程序检查房间中的消息(例如在 DB 中),如果客户端没有新消息,它订阅事件并等待它。
当其他一些客户端向服务器发布数据时,它会通知所有应用程序“134 号聊天室中的新消息”事件,它们会唤醒并将这些消息发送给客户端,依此类推。
这个模型看起来仍然是相当“低级”的模型,但是它隐藏了所有的通知方法。
另一种选择是定义一些命名队列,以便每个客户端在连接到服务器时创建这样的队列并等待新消息。当某个客户端向“134 号聊天室”发布一条新消息时,在服务器端将其广播到连接到该“134 号聊天室”的所有队列,并将该消息传递给客户端。
然而,有许多问题被提出:
- 如何在单页级别管理队列和会话级别?
- 如何删除队列并在其上创建超时?
- 如果多个“窗口”订阅同一个队列会发生什么?
在服务器端创建一个持久对象,将服务器端事件和用户端事件粘合起来。它可以通过重定向到它的不同 XHR 请求进行通信。
因此客户端 (JavaScript) 注册事件并使用 XHR 和服务器端调度的事件通知等待它们,直到页面被重建。
那么,我想知道,服务器端推送技术背后最流行和推荐的 API 模型是什么?
谢谢
编辑:添加了第三个选项
ajax - 反向AJAX?数据更改可以“推送”到脚本吗?
我注意到我的一些 ajax-heavy 网站(我访问的网站,不是我建立的网站)具有某些自动刷新功能。例如,在 GMail 中,如果我收到一条新消息,我会在没有重新加载页面的情况下看到新消息。Facebook 基于浏览器的 IM 客户端也是如此。据我所知,没有任何 java 小程序处理服务器-浏览器绑定,所以我只能假设它是由 AJAX 完成的,也许是我不知道的一些元素。所以根据我的最佳猜测,它是通过以下两种方式之一完成的:
javascript 对服务器端脚本进行稳定的“ping”,检查可能可用的任何更新(这可以解释为什么其中一些页面会导致任何其他重型页面爬行)。或者
javascript 处于闲置状态,服务器端脚本实际上将任何更新“推送”到浏览器。但我不确定这是否可能。我想有某种 AJAX 功能仍然 ping,但它只是询问“任何更新?” 并且服务器脚本有一个简单的布尔值,表示“不”或“我很高兴你问了”。但如果是这种情况,任何数据更改都需要直接调用脚本,以便它准备好数据更改并对布尔函数进行更改。
那么这可能/可行/它是如何工作的?我想像:
有人向服务器发送电子邮件/IM/DB 更新,服务器使用脚本的 URL 加上一些相关的 GET 变量调用脚本,脚本记录更改并更新“可用更新”变量,AJAX 得到响应实际上更新,AJAX 运行其正常的“更新页面”功能,执行正常的更新脚本并将它们输出到浏览器。
我之所以问,是因为 js 只是在进行持续检查似乎效率很低,这需要 a) 服务器每 1.5 秒工作一次,b) 我的浏览器每 1.5 秒工作一次,这样我就可以说“哦,男孩,我有一个 IM!就像一个真正的 IM 客户端一样!”
python - 用 Python 在 Google App Engine 中实现 Comet/Server 推送
如何在 Python 中的 Google App Engine 中实现 Comet/Server 推送?
java - 实现服务器推送
在此处阅读有关服务器推送的信息。
我想将数据从我的 Web 应用程序实时推送到客户端。
我将 TCP 套接字视为选项之一。对于 HTTP,我在这里
找到了各种 Java、PHP、Python 和其他框架。但是我不知道这些是否支持推送。
- 你会建议哪些选项和框架来实现服务器推送?
- 您会提倡使用哪种语言来实现相同的功能,为什么?