HTTP長連接
HTTP1.1協(xié)議具備的绑咱,TCP連接一直不斷保持著,Connection:keep-alive頭來驗證是否支持枢泰。
Web交互方式
普通輪詢:普通的前后端通信方式描融,請求中多半無用,可以使用HTTP長連接技術衡蚂;可以使用AJAX(XMLHttpRequest類)窿克,也可以使用ifram方式請求;實時性差讳窟。
長輪詢:對于有實時性要求的場景(其實在兩次連接之間让歼,還是會有實時性問題)敞恋,客戶端發(fā)送請求后丽啡,后端hold住,有數(shù)據(jù)時才返回硬猫,客戶端收到后斷開补箍,再啟用新的請求進行連接,通過這樣的方式模擬服務端推送啸蜜。節(jié)省了反復建立連接的開銷坑雅,但是服務器端會一直while保持著連接消耗資源,服務器端需要設置好超時時間(set_time_limit)衬横,有數(shù)據(jù)時返回(flush&ob_flush)超時時間內(nèi)如果沒有數(shù)據(jù)返回裹粤,則需要跳出斷開連接,以免死循環(huán)蜂林。這種模式被稱為反向AJAX/Comet遥诉,由服務器端進行數(shù)據(jù)實時推送。問題是:服務端開銷依然很大噪叙,每次通信都需要一次請求矮锈,HTTP請求頭中帶大量Cookie等信息睁蕾,浪費帶寬苞笨。IE不支持AJAX,因此需要iframe代替子眶。
SSE(Server-Sent Evetns):HTML5的Comet方案。SSEAPI創(chuàng)造到服務器端的單向連接粤咪,服務端推送的模式射窒,服務器響應的MINE必須是“text/event-stream”脉顿,用于服務器端給客戶端實時傳數(shù)據(jù)艾疟,只進行一次連接,則后續(xù)服務端可以一直傳送數(shù)據(jù)盗冷。
數(shù)據(jù)流:在長輪詢的基礎上怠苔,收到數(shù)據(jù)后不要斷開連接,繼續(xù)接受服務端數(shù)據(jù)仪糖;由于數(shù)據(jù)流是不斷的柑司,所以需要客戶端自己來處理解析數(shù)據(jù)和管理游標,增量處理獲得的數(shù)據(jù)锅劝,增加了邏輯復雜度攒驰。
Websocket:替代長輪詢方式,減少開銷故爵。