方法1. comet
http://www.xiumu.org/technology/the-php-notes-comet-long-connection-instance.shtml 这篇文章写的很不错,ajax保持一个与服务器的长连接,服务器阻塞直到有新的消息, 也就是说服务器需要设置最长运行时间为无限制,客户端的ajax长时间连接,直到服务器租塞完毕 ,返回结果。
浏览器端
- <meta content="text/html; charset=UTF-8" http-equiv="Content-Type">
- <title>Comet Test</title>
- <script type="text/javascript" src="http://lib.sinaapp.com/js/jquery/1.7.2/jquery.min.js"></script>
- <script type="text/javascript">
- (function($){
- function handleResponse(response){
- $('#content').append('<div>' + response['msg'] + '</div>');
- }
- var timestamp = 0;
- var url = './chat_backend.php';
- var noerror = true;
- var ajax;
- function connect() {
- ajax = $.ajax(url, {
- type: 'get',
- data: { 'timestamp' : timestamp },
- success: function(transport) {
- eval('var response = '+transport);
- timestamp = response['timestamp'];
- handleResponse(response);
- noerror = true;
- },
- complete: function(transport) {
- (!noerror) && setTimeout(function(){ connect() }, 5000) || connect();
- noerror = false;
- }
- });
- }
- function doRequest(request) {
- $.ajax(url, {
- type: 'get',
- data: { 'msg' : request }
- });
- }
- $('#cometForm').live('submit', function(){
- doRequest($('#word').val());
- $('#word').val('');
- return false;
- });
- $(document).ready(function(){
- connect();
- });
- })(jQuery);
- </script>
- <div ></div>
- <div style="margin: 5px 0;">
- <form action="javascript:void(0);" >
- <input >
- <input name="submit" type="submit" value="Send">
- </form></div>
服务器端
- <?php
- $filename = dirname(__FILE__).'/data.txt';
- // 消息都储存在这个文件中
- $msg = isset($_GET['msg']) ? $_GET['msg'] : '';
- if ($msg != ''){
- file_put_contents($filename,$msg);
- die();
- }
- // 不停的循环,直到储存消息的文件被修改
- $lastmodif = isset($_GET['timestamp']) ? $_GET['timestamp'] : 0;
- $currentmodif = filemtime($filename);
- while ($currentmodif <= $lastmodif){ // 如果数据文件已经被修改
- usleep(100000); // 100ms暂停 缓解CPU压力
- clearstatcache(); //清除缓存信息
- $currentmodif = filemtime($filename);
- }
- // 返回json数组
- $response = array();
- $response['msg'] = file_get_contents($filename);
- $response['timestamp'] = $currentmodif;
- echo json_encode($response);
- flush();
- ?>
方法2. websocket
这个是一个高端的js HTML库或者叫类, 可以和服务器建立长连接, 服务器可以发送socket信息,js获取信息后,读出并展示。
以上就是使用PHP+ajax打造聊天室应用的详细内容,更多关于使用PHP+ajax打造聊天室应用的资料请关注九品源码其它相关文章!