Maison > interface Web > js tutoriel > Explication détaillée des données JavaScript push Comet technology_javascript Skills

Explication détaillée des données JavaScript push Comet technology_javascript Skills

WBOY
Libérer: 2016-05-16 15:06:02
original
1616 Les gens l'ont consulté

Le push de données JavaScript est principalement dédié au service push en ligne de la webapp. Nous n'avons pas besoin d'envoyer des requêtes Ajax au serveur à chaque fois et de transmettre activement les données du serveur vers le local.

Historique évolutif du data push :

1. Interrogation simple du protocole HTTP, conserver un lien ou envoyer en continu des requêtes au backend via le frontend

2. Après la mise à jour H5, WebSocket a considérablement amélioré la commodité du transfert de données bidirectionnel et unidirectionnel

3. SSE (Server-Send Event) : une nouvelle façon de transmettre des données au serveur

Comet : Technologie push serveur basée sur une connexion HTTP longue
Ce cours présente Comet : une technologie de serveur push basée sur des connexions HTTP longues. Comet est une architecture d'application Web. Le serveur transmettra activement les données au programme client de manière asynchrone (boucle infinie de requête Ajax) sans que le client fasse explicitement une demande. L'architecture Comet convient parfaitement aux applications Web événementielles et aux applications qui nécessitent une forte interactivité et des performances en temps réel, telles que l'analyse des opérations boursières, les salons de discussion et les jeux en ligne sur le Web.

1. Examinons d'abord l'exemple le plus simple d'ajax demandant des données json :

index.html

<meta charset="utf-8">
<script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
 $.ajax({
  url: 'data.php',
  dataType: "json",
  success: function(data){
   console.log(data);
  }
 });
</script>

Copier après la connexion

data.php

<&#63;php 
header('Content-type: application/json;charset=utf-8');
$res = array('success'=>'ok', 'text'=>'我是测试的文本');
echo json_encode($res);
&#63;>
Copier après la connexion

De cette façon, le front-end peut obtenir les données back-end et les afficher. Simulons le backend en poussant continuellement les données vers le frontend :

Une solution consiste à envoyer en continu des requêtes ajax dans une boucle frontale

2. L'Ajax du front-end jQuery envoie des requêtes en continu :

index.html

<meta charset="utf-8">
<script type="text/javascript" src="http://apps.bdimg.com/libs/jquery/2.1.4/jquery.min.js"></script>
<script type="text/javascript">
function conn(){
 $.ajax({
  url: 'data.php',
  dataType: "json",
  success: function(data){
   console.log(data);
   conn();
  }
 });
}
conn(); 
</script>

Copier après la connexion

data.php

<&#63;php 
header('Content-type: application/json;charset=utf-8');
header("Cache-Control:max-age=0"); //设置没有缓存
sleep(1);
$res = array('success'=>'ok', 'text'=>'我是测试的文本');
echo json_encode($res);
&#63;>
Copier après la connexion

Cependant, une telle interrogation de connexion gaspille très évidemment les requêtes réseau. Nous pouvons également laisser le serveur backend le faire en boucle. Voir l'exemple ci-dessous

.

3. Natif Ajax, le serveur pousse de temps en temps (boucle backend, utilisez ob_flush() et flush() pour cracher des données)

data.php

<&#63;php 
// header('Content-type: application/json;charset=utf-8');
header("Cache-Control:max-age=0"); //设置没有缓存
$i = 0;
while ($i<9) {
 $i++;
 // $res = array('success'=>'ok', 'text'=>'我是测试的文本');
 // echo json_encode($res);
 sleep(1);
 $radom = rand(1,999);
 echo $radom;
 echo '<br/>';
 ob_flush(); //输出缓存,必须和flush()一起使用
 flush(); //缓存吐到浏览器
}
&#63;>
Copier après la connexion

Js front-end (js natif implémente ajax et sort lorsque le statut change) Référence : http://www.jb51.net/article/82085.htm

var getXmlHttpRequest = function() {
 if (window.XMLHttpRequest) {
  //主流浏览器提供了XMLHttpRequest对象
  return new XMLHttpRequest();
 } else if (window.ActiveXObject) {
  //低版本的IE浏览器没有提供XMLHttpRequest对象
  //所以必须使用IE浏览器的特定实现ActiveXObject
  return new ActiveXObject("Microsoft.XMLHttpRequest");
 }

};
var xhr = getXmlHttpRequest();
xhr.onreadystatechange = function() {
 console.log(xhr.readyState);
 if (xhr.readyState === 3 && xhr.status === 200) {
  //获取成功后执行操作
  //数据在xhr.responseText
  console.log(xhr.responseText);
 }
};
xhr.open("get", "data.php", true);
xhr.send("");
Copier après la connexion

Ce qui précède représente l'intégralité du contenu de cet article. J'espère qu'il sera utile à tout le monde dans l'apprentissage de la programmation javascript.

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal