#IM通讯协议
##IM应用场景
1. 即时通信
聊天
2. 消息推送
好友上线、微博被赞
3. 其他领域
股票价格、商品拍卖、监控报警
##协议种类
协议用途:数据封装与传输、连接有效性检测、消息接收保证
1. 私有协议
二进制:QQ 文本:MSN
2. 公开协议
XMPP(可扩展通讯和表示协议):Google Talk,vysper,消息基于XML SIP:微软、IBM
Bayeux:comet,消息基于json
##XMPP
开源服务器端:
openfire 支持上万并发 ejabber 高效,支持分布式
android客户端: www.beem-project.com
##音视频协议
1. rtmp
flash插件
2. WebRTC
支持html5
适合哪些场景?
#WebIM多种实现方式
##WebIM实现方式
1. Ajax短轮询,不需要服务器端特殊支持html5的WebSocket(webrtc) html5的event source
2. flash XMLSocket、java applet套接字
3. comet
基于 HTTP长连接、无须在浏览器端安装插件的”服务器推”技术为“Comet”
a)长轮询
b)iframe streaming
4. html5的WebSocket(webrtc)
5. html5的event source
![](https://box.kancloud.cn/2016-05-05_572afee887a43.png)
###Ajax短轮询
短轮询的特点
第二章:WebIM多种实现方式
优点:
缺点:
标准http,服务器端不需要定制
消耗大量网络资源
服务器需要频繁查询大量数据
不实时
![](https://box.kancloud.cn/2016-05-05_572afee8ce07b.png)
##长轮询Comet
1. 服务器阻断请求,没有数据时不立即返回,延迟一个长时间,比如50s再返回
2. 2. 有数据服务器立即返回
3. 服务器返回或者超时,客户端发起新的连接 http://samples.app.ucai.cn/longpolling/send.html
优点:
缺点:
节约资源
响应比较及时,是实时的吗?
浏览器兼容性好
服务器需要维持连接,占用一定资源
![](https://box.kancloud.cn/2016-05-05_572afee90664a.png)
iframe Comet
1. 页面嵌入隐藏iframe,src指向长连接请求不断开 content-encoding: chunked
2. 服务器一直往src写入js数据获取消息
优点:
缺点:
无需重复发起连接
浏览器会一直显示加载状态
![](https://box.kancloud.cn/2016-05-05_572afee9406a8.png)
![](https://box.kancloud.cn/2016-05-05_572afee97be05.png)
html5 event source
1. 客户端与服务器建立连接后不断开
2. 服务器有事件才返回数据
只能在同一个域下
服务器单向
html5 websocket
1. 按需双向通信 2. 可在不同域
和event source一样,浏览器兼容性有限
#WebIM开源框架
##nginx-push-stream-module WebIM神器
1. https://github.com/wandenberg/nginx-push-stream-module
2. 支持多种方式
http://samples.app.ucai.cn:8080/send.html
3. 生产环境可用
iframe longpolling jsonp eventsource websocket
**特点**
1. jsonp
同长轮询,可以跨域
2. EventSource
Content-Type:text/event-stream;charset=utf-8 同WebSocket,html5才支持
轻量、干净
icomet
支持上百万连接
非常稳定 http://210.14.147.15:8080/quanzhan_icomet/chat.php
4
##comet成熟的开源框架
1、基于web server
2、独立server
dwr(java) pushlet(java) nginx-push-stream-module
cometd(java)
icomet(c++)
ice: http://www.zeroc.com/chat/index.html
3、客户端都是js、html
**各框架比较 **
1、icomet
性能极高,支持上百万连接
自带验证,客户端
2、nginx-push-stream-module
功能多,支持几十万连接
3、dwr、pushlet
和java代码结合紧密
#音视频解决方案
主流技术
1、rtmp
2、WebRTC
音视频:NetStream
消息和文本:ShareObject https://github.com/arut/nginx-rtmp-module
完全无插件
演示:https://meet.jit.si/ 源码:https://github.com/jitsi/jitsi-meet
WebRTC技术
1、MediaStream: 通过设备的摄像头及话筒获得视频、音频的同步流 2、RTCPeerConnection: 是WebRTC用于构建点对点之间稳定、高效的流传输的组件 3、RTCDataChannel: 使得浏览器之间(点对点)建立一个高吞吐量、低延时的信道,用于传 输任意数据
#生产环境选择及问题
选择WebIM
需要支持人数
可靠性
支持的平台
熟悉的开发语言
是否和其他软件融合
完善生产环境
1、数据保存 2、安全验证 3、单点故障
- SWOOLE及php网络编程
- LNMP架构与Socket,http协议
- 如何高效学习
- 开发工具箱
- 编写高效的js
- js闭包编写全功能的购物车
- JSON和JSONP
- 多级分类的开发与应用
- 设计安全的登录注册流程
- 前端性能优化
- 前端架构优化
- 使用第三方云服务加速产品开发
- 移动互联网之API开发
- php分层
- 全文检索的实践与部署
- webIM的原理及前后端实现
- 如何配置高效的数据库以及MySQL的代码及插件开发
- NoSql.队列,任务队列
- 构建本机缓存,构建分布式缓存池
- 数据库分库分表的设计
- Nginx原理及模块开发初步
- 无限扩充的数据库架构
- php构建分库分表分布式数据库连接池
- 静态文件上传、分布式存储与分发
- MySQL Cluster,Proxy分析与实践
- 架构解密