💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
#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、单点故障