实现webIM技术小结——websocket IM原理篇
繼續總結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
音視頻協議:
flash插件
支持html5
適合哪些場景?
WebIM多種實現方式
基于 HTTP長連接、無須在瀏覽器端安裝插件的”服務器推”技術為“Comet”
a)長輪詢
b)iframe streaming
短輪詢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、單點故障
?
?
?
?
總結
以上是生活随笔為你收集整理的实现webIM技术小结——websocket IM原理篇的全部內容,希望文章能夠幫你解決所遇到的問題。
 
                            
                        - 上一篇: 《全球使命》背后的技术@CGDC4
- 下一篇: 看雪论坛精华23
