Maison développement back-end tutoriel php 基于jQuery与PHP实现Ajax长轮询(LongPoll)_PHP教程

基于jQuery与PHP实现Ajax长轮询(LongPoll)_PHP教程

Jul 20, 2016 am 10:56 AM
ajax jquery php et basé sur 实现 客服 方式 de fin vote

传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上查询最新的数据。种这种拉取数据的方式需要很短的时间间隔才能保证数据的精确度,但太短的时间间隔客服端会对服务器在短时间内发送出多个请求。

反转AJAX,就是所谓的长轮询或者COMET。服务器与客服端需要保持一条长时间的请求,它使得服务器在有数据时可以返回消息给客户端。

XHTML

<ol class="dp-xml">
<li class="alt"><span><span class="tag"><span class="tag-name">div</span><span> </span><span class="attribute">id</span><span>=</span><span class="attribute-value">"msg"</span><span class="tag">></span><span class="tag"></span><span class="tag-name">div</span><span class="tag">></span><span>     </span></span></span></li>
<li><span class="tag"><span class="tag-name">input</span><span> </span><span class="attribute">id</span><span>=</span><span class="attribute-value">"btn"</span><span> </span><span class="attribute">type</span><span>=</span><span class="attribute-value">"button"</span><span> </span><span class="attribute">value</span><span>=</span><span class="attribute-value">"测试"</span><span> </span><span class="tag">/></span><span>    </span></span></li>
</ol>
Copier après la connexion

jQuery

这里使用AJAX请求data.php页面获得‘success’的值,请求的时间达到80秒。在这80秒中若没有从服务端返回‘success’则一直保持连接状态,直到有数据返回或‘success’的值为0才关闭连接。在关闭连接后在继续下一次的请求。

<ol class="dp-c">
<li class="alt"><span><span>$(</span><span class="keyword">function</span><span>(){   </span></span></li>
<li>
<span>    $(</span><span class="string">"#btn"</span><span>).bind(</span><span class="string">"click"</span><span>,{btn:$(</span><span class="string">"#btn"</span><span>)},</span><span class="keyword">function</span><span>(evdata){      </span>
</li>
<li class="alt"><span>         $.ajax({      </span></li>
<li>
<span>                type:</span><span class="string">"POST"</span><span>,      </span>
</li>
<li class="alt">
<span>                dataType:</span><span class="string">"json"</span><span>,      </span>
</li>
<li>
<span>                url:</span><span class="string">"data.php"</span><span>,      </span>
</li>
<li class="alt">
<span>                timeout:80000,     </span><span class="comment">//ajax请求超时时间80秒     </span><span> </span>
</li>
<li>
<span>                data:{time:</span><span class="string">"80"</span><span>}, </span><span class="comment">//40秒后无论结果服务器都返回数据     </span><span> </span>
</li>
<li class="alt">
<span>                success:</span><span class="keyword">function</span><span>(data,textStatus){      </span>
</li>
<li>
<span>                    </span><span class="comment">//从服务器得到数据,显示数据并继续查询     </span><span> </span>
</li>
<li class="alt">
<span>                    </span><span class="keyword">if</span><span>(data.success==</span><span class="string">"1"</span><span>){      </span>
</li>
<li>
<span>                     $(</span><span class="string">"#msg"</span><span>).append(</span><span class="string">"<br>[有数据]"</span><span>+data.text);      </span>
</li>
<li class="alt"><span>                     evdata.data.btn.click();      </span></li>
<li><span>                    }      </span></li>
<li class="alt">
<span>                 </span><span class="comment">//未从服务器得到数据,继续查询     </span><span> </span>
</li>
<li>
<span>                    </span><span class="keyword">if</span><span>(data.success==</span><span class="string">"0"</span><span>){      </span>
</li>
<li class="alt">
<span>                    $(</span><span class="string">"#msg"</span><span>).append(</span><span class="string">"<br>[无数据]"</span><span>);      </span>
</li>
<li><span>                    evdata.data.btn.click();      </span></li>
<li class="alt"><span>                    }      </span></li>
<li><span>                },      </span></li>
<li class="alt">
<span>             </span><span class="comment">//Ajax请求超时,继续查询     </span><span> </span>
</li>
<li>
<span>             error:</span><span class="keyword">function</span><span>(XMLHttpRequest,textStatus,errorThrown){      </span>
</li>
<li class="alt">
<span>                     </span><span class="keyword">if</span><span>(textStatus==</span><span class="string">"timeout"</span><span>){      </span>
</li>
<li>
<span>                         $(</span><span class="string">"#msg"</span><span>).append(</span><span class="string">"<br>[超时]"</span><span>);      </span>
</li>
<li class="alt"><span>                         evdata.data.btn.click();      </span></li>
<li><span>                     }      </span></li>
<li class="alt"><span>             }      </span></li>
<li><span>                      </span></li>
<li class="alt"><span>            });      </span></li>
<li><span>    });      </span></li>
<li class="alt"><span>          </span></li>
<li><span>});    </span></li>
</ol>
Copier après la connexion

PHP

在这里是无限的循环,循环的结束条件就是获取到了返回结果返回Json数据。

并且接受$_POST['time']参数来限制循环的超时时间,避免资源的过度浪费。(浏览器关闭不会发消息给服务器,使用可能一直循环下去)

<ol class="dp-c">
<li class="alt"><span><span class="keyword">if</span><span>(</span><span class="func">empty</span><span class="keyword">empty</span><span>(</span><span class="vars">$_POST</span><span>[</span><span class="string">'time'</span><span>]))</span><span class="func">exit</span><span>();      </span></span></li>
<li>
<span>set_time_limit(0);</span><span class="comment">//无限请求超时时间     </span><span> </span>
</li>
<li class="alt">
<span class="vars">$i</span><span>=0;      </span>
</li>
<li>
<span class="keyword">while</span><span> (true){      </span>
</li>
<li class="alt">
<span>    </span><span class="comment">//sleep(1);     </span><span> </span>
</li>
<li>
<span>    usleep(500000);</span><span class="comment">//0.5秒     </span><span> </span>
</li>
<li class="alt">
<span>    </span><span class="vars">$i</span><span>++;      </span>
</li>
<li><span>          </span></li>
<li class="alt">
<span>    </span><span class="comment">//若得到数据则马上返回数据给客服端,并结束本次请求     </span><span> </span>
</li>
<li>
<span>    </span><span class="vars">$rand</span><span>=rand(1,999);      </span>
</li>
<li class="alt">
<span>    </span><span class="keyword">if</span><span>(</span><span class="vars">$rand</span><span></span>
</li>
<li>
<span>        </span><span class="vars">$arr</span><span>=</span><span class="keyword">array</span><span>(</span><span class="string">'success'</span><span>=></span><span class="string">"1"</span><span>,</span><span class="string">'name'</span><span>=></span><span class="string">'xiaocai'</span><span>,</span><span class="string">'text'</span><span>=></span><span class="vars">$rand</span><span>);      </span>
</li>
<li class="alt">
<span>        </span><span class="func">echo</span><span> json_encode(</span><span class="vars">$arr</span><span>);      </span>
</li>
<li>
<span>        </span><span class="func">exit</span><span>();      </span>
</li>
<li class="alt"><span>    }      </span></li>
<li><span>          </span></li>
<li class="alt">
<span>    </span><span class="comment">//服务器($_POST['time']*0.5)秒后告诉客服端无数据     </span><span> </span>
</li>
<li>
<span>    </span><span class="keyword">if</span><span>(</span><span class="vars">$i</span><span>==</span><span class="vars">$_POST</span><span>[</span><span class="string">'time'</span><span>]){      </span>
</li>
<li class="alt">
<span>        </span><span class="vars">$arr</span><span>=</span><span class="keyword">array</span><span>(</span><span class="string">'success'</span><span>=></span><span class="string">"0"</span><span>,</span><span class="string">'name'</span><span>=></span><span class="string">'xiaocai'</span><span>,</span><span class="string">'text'</span><span>=></span><span class="vars">$rand</span><span>);      </span>
</li>
<li>
<span>        </span><span class="func">echo</span><span> json_encode(</span><span class="vars">$arr</span><span>);      </span>
</li>
<li class="alt">
<span>        </span><span class="func">exit</span><span>();      </span>
</li>
<li><span>    }      </span></li>
<li class="alt"><span>}   </span></li>
</ol>
Copier après la connexion

运行效果:在图中可以看到无数据的请求时间达到了40S,在40S的请求中若获得数据则请求关闭。


www.bkjia.comtruehttp://www.bkjia.com/PHPjc/445814.htmlTechArticle传统的AJAX轮询方式,客服端以用户定义的时间间隔去服务器上查询最新的数据。种这种拉取数据的方式需要很短的时间间隔才能保证数据的...
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

Outils d'IA chauds

Undresser.AI Undress

Undresser.AI Undress

Application basée sur l'IA pour créer des photos de nu réalistes

AI Clothes Remover

AI Clothes Remover

Outil d'IA en ligne pour supprimer les vêtements des photos.

Undress AI Tool

Undress AI Tool

Images de déshabillage gratuites

Clothoff.io

Clothoff.io

Dissolvant de vêtements AI

AI Hentai Generator

AI Hentai Generator

Générez AI Hentai gratuitement.

Article chaud

R.E.P.O. Crystals d'énergie expliqués et ce qu'ils font (cristal jaune)
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Meilleurs paramètres graphiques
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Comment réparer l'audio si vous n'entendez personne
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Comment déverrouiller tout dans Myrise
3 Il y a quelques semaines By 尊渡假赌尊渡假赌尊渡假赌

Outils chauds

Bloc-notes++7.3.1

Bloc-notes++7.3.1

Éditeur de code facile à utiliser et gratuit

SublimeText3 version chinoise

SublimeText3 version chinoise

Version chinoise, très simple à utiliser

Envoyer Studio 13.0.1

Envoyer Studio 13.0.1

Puissant environnement de développement intégré PHP

Dreamweaver CS6

Dreamweaver CS6

Outils de développement Web visuel

SublimeText3 version Mac

SublimeText3 version Mac

Logiciel d'édition de code au niveau de Dieu (SublimeText3)

Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Guide d'installation et de mise à niveau de PHP 8.4 pour Ubuntu et Debian Dec 24, 2024 pm 04:42 PM

PHP 8.4 apporte plusieurs nouvelles fonctionnalités, améliorations de sécurité et de performances avec une bonne quantité de dépréciations et de suppressions de fonctionnalités. Ce guide explique comment installer PHP 8.4 ou mettre à niveau vers PHP 8.4 sur Ubuntu, Debian ou leurs dérivés. Bien qu'il soit possible de compiler PHP à partir des sources, son installation à partir d'un référentiel APT comme expliqué ci-dessous est souvent plus rapide et plus sécurisée car ces référentiels fourniront les dernières corrections de bogues et mises à jour de sécurité à l'avenir.

CakePHP travaillant avec la base de données CakePHP travaillant avec la base de données Sep 10, 2024 pm 05:25 PM

Travailler avec la base de données dans CakePHP est très simple. Nous comprendrons les opérations CRUD (Créer, Lire, Mettre à jour, Supprimer) dans ce chapitre.

Date et heure de CakePHP Date et heure de CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler avec la date et l'heure dans cakephp4, nous allons utiliser la classe FrozenTime disponible.

Téléchargement de fichiers CakePHP Téléchargement de fichiers CakePHP Sep 10, 2024 pm 05:27 PM

Pour travailler sur le téléchargement de fichiers, nous allons utiliser l'assistant de formulaire. Voici un exemple de téléchargement de fichiers.

Discuter de CakePHP Discuter de CakePHP Sep 10, 2024 pm 05:28 PM

CakePHP est un framework open source pour PHP. Il vise à faciliter grandement le développement, le déploiement et la maintenance d'applications. CakePHP est basé sur une architecture de type MVC à la fois puissante et facile à appréhender. Modèles, vues et contrôleurs gu

CakePHP créant des validateurs CakePHP créant des validateurs Sep 10, 2024 pm 05:26 PM

Le validateur peut être créé en ajoutant les deux lignes suivantes dans le contrôleur.

Journalisation CakePHP Journalisation CakePHP Sep 10, 2024 pm 05:26 PM

Se connecter à CakePHP est une tâche très simple. Il vous suffit d'utiliser une seule fonction. Vous pouvez enregistrer les erreurs, les exceptions, les activités des utilisateurs, les actions entreprises par les utilisateurs, pour tout processus en arrière-plan comme cronjob. La journalisation des données dans CakePHP est facile. La fonction log() est fournie

Comment configurer Visual Studio Code (VS Code) pour le développement PHP Comment configurer Visual Studio Code (VS Code) pour le développement PHP Dec 20, 2024 am 11:31 AM

Visual Studio Code, également connu sous le nom de VS Code, est un éditeur de code source gratuit – ou environnement de développement intégré (IDE) – disponible pour tous les principaux systèmes d'exploitation. Avec une large collection d'extensions pour de nombreux langages de programmation, VS Code peut être c

See all articles