利用php的死循环和刷新缓冲区实现。

  浏览器发送请求到PHP获取消息页面。

php接收到来之浏览器请求后。 循环获取数据库里面的消息。
   当存在消息的时候。PHP告诉浏览器。我有消息给你。你接受一下。但是我的消息还还有哦。你要等我发完之后才能闪哦。、

浏览器:哦。你还有话说啊。那我先把你说的东西输出出来。我等你说。你啥时候说完。我啥时候闪。

 
 

上线项目。建议利用Memcache使用 .同时大型项目。不建议。比如。假设网站有20ip、的流量如果这20ip都使用了这个系统。那么服务器将始终保持这20w的连接

/**
* 接受消息
*/
set_time_limit(0); header('content-type:text/html;charset=utf-8');
$con = new mysqli('localhost','root','','test'); $sql_ = "select id,content from msg where id > %d limit 1"; $i = 0;
while(true){
$sql = sprintf($sql_,$i);
$a = $con->query($sql);
$ret = $a->fetch_array();
if(is_null($ret)){
usleep(100);
echo '';
flush();
ob_flush();
}else{
$i = (int)$ret['id'];
var_dump($ret['content']);
flush();
ob_flush();
}
}

发送消息

/**
* 发送消息代码
*/
if(isset($_GET['msg'])){
$msg = $_GET['msg'];
$con = new mysqli('localhost','root','','test'); $msg = htmlspecialchars($msg);
$sql = "INSERT INTO `msg` (`content`) VALUES ('%s')";
$sql = sprintf($sql,$msg);
$a = $con->query($sql);
$con->close();
} ?>
<meta charset="utf-8"/>
<form>
<textarea name="msg"></textarea>
<input type="submit" value="提交">
</form>

数据库

DROP TABLE IF EXISTS `msg`;
CREATE TABLE `msg` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`content` text CHARACTER SET utf8 NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=21 DEFAULT CHARSET=utf8;

web在线聊天系统。非ajax轮询的更多相关文章

  1. 基于PHP实现一个简单的在线聊天功能(轮询ajax )

    基于PHP实现一个简单的在线聊天功能(轮询ajax ) 一.总结 1.用的轮询ajax 二.基于PHP实现一个简单的在线聊天功能 一直很想试着做一做这个有意思的功能,感觉复杂的不是数据交互和表结构,麻 ...

  2. 【Javascript】解决Ajax轮询造成的线程阻塞问题(过渡方案)

    一.背景 开发Web平台时,经常会需要定时向服务器轮询获取数据状态,并且通常不仅只开一个轮询,而是根据业务需要会产生数个轮询.这种情况下,性能低下的Ajax长轮询已经不能满足需求,频繁的访问还会造成线 ...

  3. Ajax轮询以及Comet模式—写在Servlet 3.0发布之前(转)

    2008 年的夏天,偶然在网上闲逛的时候发现了 Comet 技术,人云亦云间,姑且认为它是由 Dojo 的 Alex Russell 在 2006 年提出.在阅读了大量的资料后,萌发出写篇 blog ...

  4. Web通信之:长轮询(long-polling)(转)

    Web通信之:长轮询(long-polling) “轮询”是个耐人寻味的词,第一次看到它的时候我就直接理解为“轮流查询”了.但是看到了英文才知道这个是网络通信专业的术语.轮询,其实就是一群人在排队买东 ...

  5. WebSocket原理及与http1.0/1.1 long poll和 ajax轮询的区别【转自知乎】

    一.WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连接,循环连接的不算)首先HTTP有1.1和1.0之说,也就是所谓的ke ...

  6. ajax轮询与长轮询

      刚刚网了关于轮询的知识,必须拿到自己这里来做个备份了! 其实以前用ajax轮询做个及时数据更新的,只是当时做了不知道那个就是轮询. 首先我们什么时候会想到用轮询技术呢? 一般而言,最多的是及时信息 ...

  7. WebSocket和long poll、ajax轮询的区别,ws协议测试

    WebSocket和long poll.ajax轮询的区别,ws协议测试 WebSocket是HTML5出的东西(协议),也就是说HTTP协议没有变化,或者说没关系,但HTTP是不支持持久连接的(长连 ...

  8. long poll、ajax轮询和WebSocket

    websocket 的认识深刻有木有.所以转到我博客里,分享一下.比较喜欢看这种博客,读起来很轻松,不枯燥,没有布道师的阵仗,纯粹为分享.废话这么多了,最后再赞一个~ WebSocket是出的东西(协 ...

  9. 浅谈Websocket、Ajax轮询和长连接(long pull)

    最近看到了一些介绍Websocket的文章,觉得挺有用,所以在这里将自己的对其三者的理解记录一下. 1.什么是Websocket Websocket是HTML5中提出的新的协议,注意,这里是协议,可以 ...

随机推荐

  1. String.format Tutorial

    String format(String format, Object... args) The format specifiers for general, character, and numer ...

  2. TCP粘包/拆包问题的解决

    TCP粘包拆包问题 一个完整的包可能被TCP拆分成多个包,或多个小包封装成一个大的数据包发送. 解决策略 消息定长,如果不够,空位补空格 在包尾增加回车换行符进行分割,例如FTP协议 将消息分为消息头 ...

  3. 2014年亚洲区域赛北京赛区现场赛A,D,H,I,K题解(hdu5112,5115,5119,5220,5122)

    转载请注明出处: http://www.cnblogs.com/fraud/          ——by fraud 下午在HDU上打了一下今年北京区域赛的重现,过了5题,看来单挑只能拿拿铜牌,呜呜. ...

  4. 【设计模式:单例模式】使用单例模式加载properties文件

    先准备测试程序: package org.jediael.util; import static org.junit.Assert.*; import org.junit.Test; public c ...

  5. js 函数声明与函数表达式

      1,变量包括全局变量和局部变量,局部变量只能在函数内部访问.如果函数传参和全局变量一样的话,即使是给全局变量赋值,这里会把全局变量当成局部变量的. 如: 1: var x='x'; 2:   3: ...

  6. scp和pscp

    在linux中,我们常用scp命令传输文件: 如以下实例,我们想把当前服务器文件abc.sql传输到192.168.1.1服务器上,我们可以执行以下命令: scp /home/person/hww/a ...

  7. SQLServer优化资料整理(二)

    存储过程编写经验和优化措施 一.适合读者对象:数据库开发程序员,数据库的数据量很多,涉及到对SP(存储过程)的优化的项目开发人员,对数据库有浓厚兴趣的人. 二.介绍:在数据库的开发过程中,经常会遇到复 ...

  8. EF调用存储过程实例

    创建实体: public class User { public string UserID { get; set; } public string UserName { get; set; } pu ...

  9. C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用演示

    本文演示了C语言中预定义符 __FILE__, __LINE__, __FUNCTION__, __DATE__, __TIME__ 的使用. 这几个预定义符的名称就没必要再介绍了,顾名思义嘛. // ...

  10. 如何把apache和nginx 加入到系统服务,用service 命令来控制启动、停止

    1 把apache 加入到系统服务,即用service 命令来控制Apache 启动.停止  如果Linux服务器上默认安装了httpd的话(用rpm -qa|grep httpd查看),那你就可以用 ...