使用PHP+ajax打造聊天室应用
方法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 id="content"></div>
<div style="margin: 5px 0;">
<form action="javascript:void(0);" id="cometForm" method="get">
<input id="word" name="word" type="text" value="">
<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打造聊天室应用的更多相关文章
- Ajax实现聊天室
Ajax实现聊天室 运行效果如下: 代码显示: var net=new Object();//编写构造函数net.AjaxRequest=function(url,onload,onerror,met ...
- 基于servlet和ajax的聊天室
(手贱点了更新发布时间,发布时间变成6-9...) 2017-5-20,在这个奇特的日子,我不再满足于在本地测试javaweb,于是在上腾讯云买了第一个云服务器,由于是学生认证,所以一个月只要10块钱 ...
- ajax实现聊天室功能
需求如下: 先死后活. 需求分析,分析思路如图所示: 1.创建数据库 create database chat; create table messages( id int unsigned prim ...
- 采用PHP实现”服务器推”技术的聊天室
传统的B/S结构的应用程序,都是采用”客户端拉”结束来实现客户端和服务器端的数据交换. 本文将通过结合Ticks(可以参看我的另外一篇文章:关于PHP你可能不知道的-PHP的事件驱动化设计),来实 ...
- 使用socket.io打造公共聊天室
最近的计算机网络课上老师开始讲socket,tcp相关的知识,当时脑袋里就蹦出一个想法,那就是打造一个聊天室.实现方式也挺多的,常见的可以用C++或者Java进行socket编程来构建这么一个聊天室. ...
- 利用socket.io+nodejs打造简单聊天室
代码地址如下:http://www.demodashi.com/demo/11579.html 界面展示: 首先展示demo的结果界面,只是简单消息的发送和接收,包括发送文字和发送图片. ws说明: ...
- 打造属于你的聊天室(WebSocket)
SpringBoot 是为了简化 Spring 应用的创建.运行.调试.部署等一系列问题而诞生的产物,自动装配的特性让我们可以更好的关注业务本身而不是外部的XML配置,我们只需遵循规范,引入相关的依赖 ...
- 分享一个基于长连接+长轮询+原生的JS及AJAX实现的多人在线即时交流聊天室
实现网页版的在线聊天室的方法有很多,在没有来到HTML5之前,常见的有:定时轮询.长连接+长轮询.基于第三方插件(如FLASH的Socket),而如果是HTML5,则比较简单,可以直接使用WebSoc ...
- PHP+ajax聊天室源码!支持长轮循跟定时请求两种
var lastID = "1";//声明上次取回的消息的ID var isposted = false; var mGetTime;//设置setTimeout的返回值 // ...
随机推荐
- hdu 2077
PS:汉诺塔问题....找规律...观察发现,先是小的移动到B,然后大的移动到C(两步),然后小的移动到C,完成.刚开始就以为是f(n)=2f(n-1)+2..然而,小的移动一步是需要f(n)=3f( ...
- Eclipse卡死问题解决办法
偶尔浏览到几个eclipse卡死的文章,收集一下. 1. eclipse 3.6卡死 eclipse自动提示反应慢,或者卡死, 有人说这是eclipse 3.6的版本bug, 但是3.5版本好像也有 ...
- BZOJ 1954 The xor-longest Path
问题转化为一些数里面选两个数异或和最大. #include<iostream> #include<cstdio> #include<cstring> #includ ...
- translate居中
<!doctype html> <html> <head> <meta charset="UTF-8"> < ...
- 【转】关于iPhone界面适配详细版本
对于上面哪一张适配图很多人不了解什么意思,现在我就慢慢地解释一下. 下面我们观看一下我们需要的几张效果图 3GS手机 iPhone 4/4S iPhone 5/5c/5s iPhone 6 iPhon ...
- [转]Raft [Why Not Paxos]
http://blog.csdn.net/cszhouwei/article/details/38374603 动画讲解 http://thesecretlivesofdata.com/raft/ W ...
- highcharts 的使用实例:待写
http://www.hcharts.cn/demo/index.php 方法一:在Axis(包括xAxis和yAxis)有一个属性tickInterval,number类型,表示间隔,也就是间隔多少 ...
- python 中 sorted() 和 list.sort() 的用法
今天用python自带的sorted对一个列表进行排序, 在这里总结一下 只要是可迭代对象都可以用sorted . sorted(itrearble, cmp=None, key=None, reve ...
- Apache、tomcat、Nginx常用配置合集
配置文件地址: Apache: /etc/httpd/conf/httpd.conf tomcat: /usr/local/tomcat/conf/server.xml Nginx : /usr/l ...
- Delphi第一个入门程序——鼠标点击计数 - imsoft.cnblogs
实现的效果如下: 制作要点: 添加一个按钮Button1和一个标签Label1,并双击按钮进入编程界面在var Form1: TForm1;下面一行加上 n:integer;//定义变量. 然后在 ...