使用Ajax long polling实现简单的聊天程序

前端之家收集整理的这篇文章主要介绍了使用Ajax long polling实现简单的聊天程序前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

关于web实时通信,通常使用长轮询或这长连接方式进行实现。

为了能够实际体会长轮询,通过Ajax长轮询实现了一个简单的聊天程序,在此作为笔记。

长轮询

传统的轮询方式是,客户端定时(一般使用setInterval)向服务器发送Ajax请求,服务器接到请求后马上返回响应信息。使用这种方式,无论客户端还是服务端都比较好实现,但是会有很多无用的请求(服务器没有有效数据的时候,也需要返回通知客户端)。

而长轮询是,客户端向服务器发送Ajax请求,服务器接到请求后保持住连接,直到有新消息才返回响应信息,客户端处理完响应信息后再向服务器发送新的请求。这样的好处就是,在没有数据的时候,客户端和服务器之间不会有无用的请求。

对于使用长轮询的实现,客户端和服务器都有一定的要求:

客户端发起请求,当接收到服务器响应(正常或异常的响应)后,需要向服务求发送新的请求,从而达到轮询的效果
服务器端要能够一直保持住客户端的请求,直到有响应消息;同时服务器对请求的处理要支持非阻塞模式
实现

例子很简单,客户端使用Ajax进行轮询请求,服务器端使用Python的gevent库来实现了非阻塞式的响应。

客户端

客户端实现了一个longPolling的函数,当文档加载完成后,就会调用这个longPolling函数

注意Ajax请求的complete属性设置,每次当longPolling函数中的Ajax请求结束后,又会重新通过longPolling函数向服务器发出轮询请求。
http://www.battlenet.com.cn/sc2/zh/forum/topic/17644734313
http://www.battlenet.com.cn/sc2/zh/forum/topic/17644774318
http://www.battlenet.com.cn/sc2/zh/forum/topic/17645044336
http://www.battlenet.com.cn/sc2/zh/forum/topic/17644304301
http://www.battlenet.com.cn/sc2/zh/forum/topic/17644344290
http://www.battlenet.com.cn/sc2/zh/forum/topic/17645044338
http://www.battlenet.com.cn/sc2/zh/forum/topic/17644734317
http://www.battlenet.com.cn/sc2/zh/forum/topic/17644344294
http://www.battlenet.com.cn/sc2/zh/forum/topic/17645044340
http://www.battlenet.com.cn/sc2/zh/forum/topic/17645044342

猜你在找的Ajax相关文章