javascript和jQuery实现网页实时聊天的ajax长轮询

介绍
大家都知道,HTTP协议是一个属于应用层的面向对象的协议,HTTP 协议一共有五大特点:
1、支持客户/服务器模式;
2、简单快速;
3、灵活;
4、无连接;
5、无状态。
所以一次的请求都是一个单独的事件,和前后都没有联系。所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的长时间联系,从而源源不段地获取信息。
一直以来的方式无非有这么几种:
1、长连接,即服务器端不断开联系,PHP服务器端用ob系列函数来不停的读取输出,但是相当耗费服务器资源。
2、Flash socket,flash的as3语言,创建一个socket服务器用来处理信息。
3、轮询,顾名思义就是不停地发送查询消息,一有新消息立刻更新,但是会有多次无用请求。
4、长轮询,是轮询的升级版,需要服务器端的配合。
5、websocket,HTML5的通信功能,建立一个与服务器端的专用接口ws协议来进行通讯,兼容可能成为问题。
这篇博文总结一下用JS和JQ两种方式(其实不同就是js和jq的实现),实现AJAX长轮询。
长轮询的思想:


如图:用AJAX发送询问信息,服务器在没有信息要返回的时候进入无限等待。由于AJAX异步的特性,PHP在服务器端执行等待不会影响到页面的正常处理。一旦服务器查询到返回信息,服务器返回信息,AJAX用回调函数处理这条信息,同时迅速再次发送一个请求等待服务器处理。
与传统轮询相比,长轮询在服务器没的返回信息的时候进入等待,减少了普通轮询服务器无数次的空回复。可以这样认为,长轮询使服务器每次的返回更有目的性,而不是盲目返回。
长轮询的服务器端实现:
聊天信息存储:
数据库设计为信息ID(msgid),发送人(sender),接收人(receiver),信息内容(content),设置senderRead和receiverRead的目的是标记信息是否已被读取,读取后改变标记,以区别信息是否已经被读取。

程序扩充:
添加发送聊天窗口:
新建一个函数用来处理ajax的POST请求,用ajax将发信人,每次发送的信息,收信人发送到服务器端,并设置一个单独的PHP脚本处理信息,将信息插入数据库。
需要注意的是,用JS原生实现POST请求发送信息时,要设置ajax对象的HTTP头,模拟表单提交的操作:
xhr.setRequestHeader("Content-type","application/x-www-form-urlencoded");
聊天室消息处理:
为了防止每次都查询到全部信息,我们对数据库的查询操作更改一下,设置idflag=0,每次查询后,设置idflag为查询到的数据的id,查询时我们查询比idflag大的ID,即,新添加进去的信息。



JASChatWeb 网页聊天室 1.0版--群聊+私聊+贴图 预览 http://ww1.sinaimg.cn/large/560ce489gw1dhm3ju5uxgj.jpg 经过多人 多浏览器测试,效果良好 实现了各种聊天常用功能 (1)群聊 (2)私聊 私聊窗口可拖动关闭 (3)在线用户列表 (4)修改文字颜色 (5)贴图功能 可设置图片大小, 并且可以预览 (6)清除聊天消息记录 (7)声音功能 并可手动关闭和打开 (8)头像 (9)表情 另内里有桌面版和源程序,服务器端口设置了1215 ------------------------------------------------------- 如何使用,部署 MySql: (1)用winrar打开 JASChatWeb.war文件, 在目录 \WEB-INF\classes\com\jas\www 下找到 jaschatweb.sql文件, 解压到C盘根目录 (2)用winrar打开 JASChatWeb.war文件, 在目录 \WEB-INF\classes\com\jas\www 下找到 DB.java文件 找到: conn = DriverManager.getConnection("jdbc:mysql://localhost:3307/mydata?user=scott&password=tiger"); 把3307的端口改成你的mysql开放端口(默认是3306) (3)MySql中用管理员权限运行 source c:\jaschatweb.sql (建表文件) Tomcat: (1)把压缩包里的 JASChatWeb.war文件 放置到 tomcat/webapps目录下 (2)打开tomcat/conf/web.xml文件 ,找到 <session-timeout>30</session-timeout> 一行, 把30改成 1-5的数(作用设置是session超时时间,用于扑捉用户直接关闭浏览器时的下 线状态) 完成以上两步后打开tomcat即可在浏览器运行 http://你的IP:tomcat设置端口/JASChatWeb/ 打开 -------------------------------------------------------- --------------------------------------------------------------- 技术实现: JSP+Servlet+mysql+jquery+ajax+flash(实现各浏览器播放声音) 主要文件介绍: 前端 (1)login.jsp--登陆页,设置session,还有更改了用户的登陆状态 (2)index.jsp--主要聊天页面 (3)jas.js -- jquery+控制声音flash插件+颜色选择器 (4)jas2.js -- 页面主要逻辑的JS, 各种前端功能实现 (5)tom.js -- 后期做的实现聊天框拖曳的JS (6)jas.css -- 页面布局 后台 (1)DB.java --用于JDBC的链接 (2)Deal.java --群聊的收发逻辑 和 数据库交互 (3)Ptalk.java -- 私聊的各种逻辑(收发只在内存中,没使用数据库) (4)UserList.java -- 用户列表的逻辑 (5)SL.java ServetLogout.java -- 两个监听器,一个负责监听用户session超时,另一个用于服务器关闭时清除用户登陆状态 -----------------------------------------------------------------
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值