#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

###Ajax短輪詢
短輪詢的特點
第二章:WebIM多種實現方式
優點:
缺點:
標準http,服務器端不需要定制
消耗大量網絡資源
服務器需要頻繁查詢大量數據
不實時

##長輪詢Comet
1. 服務器阻斷請求,沒有數據時不立即返回,延遲一個長時間,比如50s再返回
2. 2. 有數據服務器立即返回
3. 服務器返回或者超時,客戶端發起新的連接 http://samples.app.ucai.cn/longpolling/send.html
優點:
缺點:
節約資源
響應比較及時,是實時的嗎?
瀏覽器兼容性好
服務器需要維持連接,占用一定資源

iframe Comet
1. 頁面嵌入隱藏iframe,src指向長連接請求不斷開 content-encoding: chunked
2. 服務器一直往src寫入js數據獲取消息
優點:
缺點:
無需重復發起連接
瀏覽器會一直顯示加載狀態


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分析與實踐
- 架構解密