移動(dòng)網(wǎng)絡(luò)應(yīng)用開發(fā)中,使用 HTTP 協(xié)議比起使用 socket 實(shí)現(xiàn)基于 TCP 的自定義協(xié)議有哪些優(yōu)勢?
HTTP 是應(yīng)用層協(xié)議,TCP 是傳輸層協(xié)議(位于應(yīng)用層之下),放在一起類比并不合適。
不過猜測樓主是想對比 “標(biāo)準(zhǔn) HTTP 協(xié)議” 還是 “自定義的協(xié)議(基于 TCP Socket)” 。
一般來說,移動(dòng)應(yīng)用推薦使用 HTTP 協(xié)議,有很多優(yōu)點(diǎn):
- HTTP 發(fā)展成熟
HTTP 幾乎已經(jīng)快成為一種通用的 Web 標(biāo)準(zhǔn),Web Services、REST、Open API、OAuth 等等都是基于 HTTP 協(xié)議的。它已經(jīng)不僅僅是 Hyper Text 的傳輸標(biāo)準(zhǔn)了,幾乎所有數(shù)據(jù)的傳輸(多媒體、XML、JSON)都可以采用 HTTP。
- 后臺復(fù)用
因?yàn)楹芏鄳?yīng)用,除了有移動(dòng)端,還有Web端,甚至桌面端。
Web 版中前后臺交互,無論是頁面請求還是 AJAX 請求,都是采用標(biāo)準(zhǔn) HTTP 協(xié)議。那么其他的客戶端沒有理由重新設(shè)計(jì)一套協(xié)議。
- HTML 5 應(yīng)用
現(xiàn)在不少移動(dòng)產(chǎn)品都采用或者半采用 HTML 5 技術(shù),那么和服務(wù)器的交互又回歸到 AJAX 上。不用說,還是離不開 HTTP。
但是也有一些局限性,比如以下場景就不適合 HTTP 協(xié)議:
- 實(shí)時(shí)數(shù)據(jù)推送
除了 iOS 開發(fā)提供有標(biāo)準(zhǔn)的 Apple 消息推送中心,其他移動(dòng)產(chǎn)品可能還是要采用 Socket 長連接才能保證實(shí)時(shí)通訊。
比較常見的有很多即時(shí)通訊軟件采用的 XMPP 協(xié)議。
- 流媒體
適用于音頻播放、視頻播放、語音會(huì)議等等,一般可能采用 RTMP 協(xié)議