继续总结webIM实现的核心技术-websocket,以及socket.io的总结归纳~~
IM通讯协议
应用场景:
- 即时通信 聊天
- 消息推送 好友上线,微博被赞
- 其他领域 股票价格/商品拍卖/监控报警
协议种类:
协议用途:数据封装与传输,连接有效性检测,消息接收保证
- 私有协议
- 二进制:QQ
- 文本: MSN
- 公共协议
- XMPP(可扩展通讯和表示协议):Google talk, vesper, 消息基于XML
- SIP:微软,IBM
- Bayeux:comet,消息基于json
XMPP
开源服务器端:
openfire 支持上万并发 ejabber 高效,支持分布式
android客户端: www.beem-project.com
音视频协议:
- rtmp
flash插件 - WebRTC
支持html5
适合哪些场景?
WebIM多种实现方式
- Ajax短轮询,不需要服务器端特殊支持html5的WebSocket(webrtc) html5的event source
- flash XMLSocket、java applet套接字
- comet
基于 HTTP长连接、无须在浏览器端安装插件的”服务器推”技术为“Comet”
a)长轮询
b)iframe streaming - html5的WebSocket(webrtc)
- html5的event source
短轮询Ajax的特点:
优点: 标准http,服务端不需要定制
缺点: 消耗大量网络资源,服务器需要频繁查询大量数据,不实时
长轮询comet的特点:
优点:
- 服务器阻断请求,没有数据时不立即返回,延迟一个长时间,比如50s再返回
- 有数据服务器立即返回
- 服务器返回或者超时,客户端发起新的连接 http://samples.app.ucai.cn/longpolling/send.html
缺点:
- 节约资源
- 响应比较及时,是实时的
- 浏览器兼容性好
- 服务器需要维持连接,占用一定资源
iframe Comet
优点:
- 页面嵌入隐蔽iframe,src指向长连接请求不断开content-encoding:chunked
- 服务器一直往src写入js数据获取消息
缺点:
- 无需重复发起连接
- 浏览器会一直显示加载状态
html5 event source
优点:
- 客户端与服务端建立连接后不断开
- 服务器有事件才返回数据
- 只能在同一个域下
- 服务器单向
html5 websocket
- 按需双向通信
- 可在不同域和event sounce一样,浏览器兼容性有限
web IM开源框架
nginx-push-stream-module WebIM神器
- https://github.com/wandenberg/nginx-push-stream-module
- 支持多种方式 http://samples.app.ucai.cn:8080/send.html
- 生产环境可用 iframe longpolling jsonp eventsource websocket
特点
- jsonp 同长轮询,可以跨域
- EventSource Content-Type:text/event-stream;charset=utf-8 同WebSocket,html5才支持轻量、干净
- icomet 支持上百万连接非常稳定 http://210.14.147.15:8080/quanzhan_icomet/chat.php
comet成熟的开源框架
- 基于web server
- 独立server
dwr(java) pushlet(java) nginx-push-stream-module
cometd(java)
icomet(c++)
ice: http://www.zeroc.com/chat/index.html
客户端都是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、单点故障