反向Ajax之Socket.io
1.什么是反向ajax?
传统的ajax的困惑?
新需求--当服务器端数据发生变化时,客户端(浏览器端)如何即时得到通知呢?
找一些实际的案例:客服系统、在线聊天
这类应用,有一个显著的特点:
数据并不是单向的,原来的数据,都是从浏览器端向服务器端发起请求,然后获取数据。
现在的需求发生变化了,有时候,数据是从服务器端 推送 到浏览器端。
前面所有的http请求/响应模型都是基于单向的,包括ajax。
从服务端向浏览器端推送数据的这种ajax应用,称之为反向ajax。
2.常见解决方案
有以下三种:
*l HTTP轮询
*l Comet (长轮询/iframe)
*l websockets
轮询的优缺点
优点:就是实现起来比较简单
缺点:有大量的无用的请求,造成性能的损失,包括带宽的浪费。由于是有固定的时间间隔,所以造成实时性不够。
不管是轮询还是Comet,都不是最好的解决方案
最好的解决方案是web socket。
WebSockets是HTML5的一种新通信协议,它实现了浏览器与服务器之间的双向通信。有了websocket,我们就可以实现互发。
Websockets只是一个协议,我们需要去实现这些协议。目前有很多好的方案,最好的就是socket.io。
3.Socket.io
Socket.io是一个完全由JavaScript实现、基于Node.js、支持WebSocket的协议用于实时通信、跨平台的开源框架,它包括了客户端的JavaScript 和服务器端的Node.js。
由于是双向通信,可以在浏览器端向服务器端发送请求,也可以从服务器端向浏览器端发送请求。包括两个部分,客户端有一个socket.io相关的对象,同理, 在服务器端也有一个socket.io相关的对象。
Socket.io设计的目标是构建能够在不同浏览器和移动设备上良好运行的实时应用,如实时分析系统、二进制流数据处理应用、在线聊天室、在线客服系统、评 论系统、WebIM等。
4.Socket.io基本使用
可以参考官网:http://socket.io/docs/
注意:
l 要以服务器的方式来访问客户端页面
l 引入外部js之后,需要对外部静态资源的解析
反向Ajax之Socket.io的更多相关文章
- socket.io的websocket示例
写了一个简单的demo,直接上代码吧.用的时候注意一下版本号,可能 socket.io 的 API 有修改~ 效果图 index.html <!DOCTYPE <!DOCTYPE html ...
- 利用socket.io实现消息实时推送
最近在写的项目中存在着社交模块,需要实现这样的一个功能:当发生了用户被点赞.评论.关注等操作时,需要由服务器向用户实时地推送一条消息.最终完成的项目地址为:socket-message-push,这里 ...
- Websocket --socket.io的用法
<!DOCTYPE html> <html> <head> <title>Hello WebSocket</title> <link ...
- 基于 socket.io, 简单实现多平台类似你猜我画 socket 数据传输
一.前言 socket.io 实现了实时双向的基于事件的通讯机制,是基于 webSocket 的封装,但它不仅仅包括 webSocket,还对轮询(Polling)机制以及其它的实时通信方式封装成了通 ...
- websocket与socket.io
什么是Websocket? Websocket是一个独立于http的实时通信协议,最初是在HTML5中被引用进来的,在HTML5规范中作为浏览器与服务器的核心通信技术被嵌入到浏览器中.WebSocke ...
- 30分钟学会反向Ajax
场景1:当有新邮件的时候,网页自动弹出提示信息而无需用户手动的刷新收件箱. 场景2:当用户的手机扫描完成页面中的二维码以后,页面会自动跳转. 场景3:在类似聊天室的环境中有任何人发言,所有登录用户都可 ...
- socket.io,理解socket.io
原文:http://www.cnblogs.com/xiezhengcai/p/3957314.html 要理解socket.io ,不得不谈谈websocket 在html5之前,因为http协议是 ...
- socket.io简单说明及在线抽奖demo
socket.io简单说明及在线抽奖demo socket.io 简介 Socket.IO可以实现实时双向的基于事件的通信. 它适用于各种平台,浏览器或设备,也同样注重可靠性和速度. socket.i ...
- Socket.IO – 基于 WebSocket 构建跨浏览器的实时应用
Socket.IO 是一个功能非常强大的框架,能够帮助你构建基于 WebSocket 的跨浏览器的实时应用.支持主流浏览器,多种平台,多种传输模式,还可以集合 Exppress 框架构建各种功能复杂 ...
随机推荐
- 批量检测GoAhead系列服务器中Digest认证方式的服务器弱口令
最近在学习用python写爬虫工具,某天偶然发现GoAhead系列服务器的登录方式跟大多数网站不一样,不是采用POST等方法,通过查找资料发现GoAhead是一个开源(商业许可).简单.轻巧.功能强大 ...
- Python3安装Requests
安装Requests费了1天的时间,囧.终于还是在官网找到解决方法,可以参考这个http://docs.python-requests.org/en/latest/user/install/#inst ...
- linux 安装jdk以及nginx详细过程
一.安装jdk 1:首先下载jdk到本地,然后通过git 上传到linux服务器上 2:进入目录usr,并创建目录java,将jdk的压缩文件移动到该目录下 cd /usr mkdir java mv ...
- centos单机安装zookeeper+kafaka
环境如下: CentOS-7-x86_64zookeeper-3.4.11kafka_2.12-1.1.0 一.zookeeper下载与安装1)下载zookeeper [root@localhost ...
- [论文阅读] Deep Residual Learning for Image Recognition(ResNet)
ResNet网络,本文获得2016 CVPR best paper,获得了ILSVRC2015的分类任务第一名. 本篇文章解决了深度神经网络中产生的退化问题(degradation problem). ...
- 学习React系列(九)——高阶函数
定义:高阶组件就是一个函数,且该函数接收一个组件作为参数,并返回一个新的组件. (上一篇已经说过了高阶组件可以用来解决交叉问题) 一.不要改变原始组件,使用组合 class A extends Rea ...
- java创建线程的三种方法
这里不会贴代码,只是将创建线程的三种方法做个笼统的介绍,再根据源码添加上自己的分析. 通过三种方法可以创建java线程: 1.继承Thread类. 2.实现Runnable接口. 3.实现Callab ...
- linux samba服务配置
1.下载 wget+rpm或yum install 2.配置/etc/samba/smb.conf cat smb.conf | grep setsebool 执行终端打印出来的字符串 setsebo ...
- 我们为什么要用springcloud?
1 2 单体架构 在网站开发的前期,项目面临的流量相对较少,单一应用可以实现我们所需要的功能,从而减少开发.部署和维护的难度.这种用于简单的增删改查的数据访问框架(ORM)十分的重要. 垂直应用架构 ...
- HtmlUnit入门一
htmlunit 是一款开源的java 页面分析工具,读取页面后,可以有效的使用htmlunit分析页面上的内容. 项目可以模拟浏览器运行,被誉为java浏览器的开源实现.是一个没有界面的浏览器. 采 ...