实现webIM技术小结——websocket IM原理篇

继续总结webIM实现的核心技术-websocket,以及socket.io的总结归纳~~

IM通讯协议

应用场景:

  1. 即时通信          聊天
  2. 消息推送          好友上线,微博被赞
  3. 其他领域          股票价格/商品拍卖/监控报警

协议种类:

协议用途:数据封装与传输,连接有效性检测,消息接收保证

  • 私有协议           
    • 二进制:QQ
    • 文本: MSN
  • 公共协议
    • XMPP(可扩展通讯和表示协议):Google talk, vesper, 消息基于XML 
    • SIP:微软,IBM
    • Bayeux:comet,消息基于json

XMPP

开源服务器端:
openfire 支持上万并发 ejabber 高效,支持分布式
android客户端: www.beem-project.com

音视频协议:

  1. rtmp
    flash插件
  2. WebRTC
    支持html5
    适合哪些场景?

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

短轮询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、单点故障

 

 

 

 

你可能感兴趣的:(求职面试题库,前端应用)