使用 PHP 和 jQuery 模拟推送通知会导致服务器问题
Posted
技术标签:
【中文标题】使用 PHP 和 jQuery 模拟推送通知会导致服务器问题【英文标题】:Simulating push notifications with PHP and jQuery leads to server problems 【发布时间】:2012-04-19 12:46:48 【问题描述】:我正在通过以下方式使用 php 模拟推送通知:
-
jQuery ajax 调用调用服务器上的脚本。
脚本在每次迭代后使用 for 循环和睡眠延迟。
如果发生了什么事 - 循环被打破,信息返回给 jQuery。
如果脚本运行超过一分钟 - 脚本返回一个空值。
当 jQuery 从服务器接收到答案时,它会解析信息并再次启动相同的过程。
这是一个程序,被 facebook 使用,它在他们的网站上就像一个魅力。在我的服务器上,我遇到以下问题: 例如,如果脚本延迟了 60 秒,而我在第 30 秒点击了我网站上的另一个链接,我们还有 30 秒的时间来生成输出。所以我的网络服务器正在等待这 30 秒,而我的点击请求在这几秒后被处理,这使得我的网站几乎无法使用。我仔细检查了 facebook,发现当您单击链接时,页面永远不会刷新,并且请求会继续在同一页面上流动。但是地址栏发生了变化。在我的网站上实现相同目标的方法是什么?有没有办法强制我的服务器一次处理一个以上的 PHP 请求,或者我们必须只使用 javascript 来执行此操作。我错过了什么?
P.S 据我所知,没有办法使用 javascript 更改地址栏。
【问题讨论】:
我理解了这个概念,但轮询不是更有效吗?这样你就可以在客户端上等待,而不是在服务器上。您实际上将服务器要处理的连接数增加了一倍。 对于“使用js更改地址栏”***.com/questions/824349/… 如果轮询的意思是“客户端每隔几秒就向服务器请求更改”,这有点不稳定,因为每个查询都包含 HTTP 标头,并且传输数据需要更长的时间。我们还将同时在该网站上拥有超过 1000 名用户,因此想象一下,如果 1000 名用户每隔几秒就要求更改一次,服务器会发生什么情况。 @Spidey 从技术上讲,他正在进行轮询,但不是间隔类型。他保持连接,直到发生某些事情或达到超时时才让服务器响应。如果发送了响应,则 JS 解析返回并调用服务器以获取另一个“保持连接”。 是的,我明白这一点,但服务器需要处理大量同时连接。如果 http 标头开销对您来说是个问题,那是一个更好的解决方案,但我认为服务器内存/处理器一次会出现如此多的打开连接的问题。虽然服务器处理标准连接需要不到一秒的时间,但这种连接会挂起更长的时间。 【参考方案1】:实际上在 html 5 中有。它被称为 History API。
您可以在 GitHub 上找到包含源代码的快速演示:
http://html5demos.com/history
Dive Into HTML5 中关于它的完整章节:
http://diveintohtml5.info/history.html
【讨论】:
以上是关于使用 PHP 和 jQuery 模拟推送通知会导致服务器问题的主要内容,如果未能解决你的问题,请参考以下文章
APNs Provider API HTTP/2 使用 php,curl 导致发送的多个推送通知出错