首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >不进行轮询的网页更新

不进行轮询的网页更新
EN

Stack Overflow用户
提问于 2013-12-19 18:49:35
回答 1查看 4.3K关注 0票数 3

我正在开发一个web应用程序,用户可以请求一个服务,提供者将可以对他作出回应。因此,当用户请求某种服务时,我们的应用程序将向提供者发送通知(要求他对用户作出响应)。我想做的是:当用户请求服务时,提供者会立即收到通知(就像facebook一样)。

一种方法是使用AJAX每5-10秒向服务器发送请求;我们称之为轮询(据我所知)。但是,这种方法有一些缺陷,我看到:-

  • 由于请求将每5-10秒发送一次,因此对服务器来说,操纵请求和返回空数据(非常频繁)是一种负载。
  • 而且,即使没有任何更新,向服务器发送请求也是毫无用处的。
  • 假设有人在服务器响应请求之后请求服务。因此,提供者必须再等待5-10秒才能得到有人请求的通知。

因此,我想知道是否有什么技术可以在系统发生更改时立即更新我们的网页,而无需使用AJAX轮询请求。

EN

回答 1

Stack Overflow用户

发布于 2013-12-19 19:07:54

下面是一个使用php的简单服务器发送事件脚本。

支持

https://developer.mozilla.org/en-US/docs/Web/API/EventSource

js

代码语言:javascript
复制
var sse=new EventSource("sse.php");
sse.onmessage=function(e){
 document.body.innerHTML=e.data;
};

sse.php

代码语言:javascript
复制
header('Content-Type: text/event-stream'); // specific sse mimetype
header('Cache-Control: no-cache'); // no cache
while(true) {
 if(/*something changes*/){
  echo "id: ".time().PHP_EOL;
  echo "data: ".$data.PHP_EOL;
  echo PHP_EOL;
 }
  ob_flush(); // clear memory
  flush(); // clear memory
  sleep(10);// seconds 
}

这样可以保持与客户端的连接打开,

然后检查是否有什么改变..。db/文件

如果更改,则输出数据

然后清除php缓存。

等待10秒,然后再做一次。

如您所见,只有在服务器上发生更改时,客户端才会接收数据。

但我完全不知道服务器怎么能处理1000人。

node.js将是一个更好的方法。但这取决于您所使用的语言和/或是否可以实际使用node.js。

websockets是两种方式。

服务器发送的事件是单向的。(您需要这个)

编辑

sse响应中的更多数据:

js

代码语言:javascript
复制
var sse=new EventSource("sse.php");
sse.onmessage=function(e){
 console.log(JSON.parse(e.data))
};

sse.php

代码语言:javascript
复制
header('Content-Type: text/event-stream'); // specific sse mimetype
header('Cache-Control: no-cache'); // no cache
while(true) {
 if(/*something changes*/){
  echo "id: ".time().PHP_EOL;

  $dataArray=array('id'=>$id,'name'=>$name,'more'=>$more);
  echo "data: ".json_encode($dataArray).PHP_EOL;

  echo PHP_EOL;

 }
  ob_flush(); // clear memory
  flush(); // clear memory
  sleep(10);// seconds 
}

如果你需要更多的信息,直接问

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/20689424

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档