一些应用只是使用了HTTP编程,也就是只用了AFNetworking。 但是听说IM类的应用需要使用到socket,是为什么呢?
光阴似箭催人老,日月如移越少年。
http是一次性的,socket可以實現長連接,凡是一個來回網絡請求解決不了問題的都會用socket。 例如微信裡刷新朋友圈、下載圖片用http請求,收訊息因為這邊不知道什麼時候來訊息就搞個socket一直監聽,發訊息因為會比較頻繁用http每次都要重新握手所以也要用socket,還有音視訊通話,斷點續傳等等都要用socket。理論上啟動微信或斷網重連後的同步訊息可以用http去請求沒有收到的訊息,但因為諸多原因也是用socket。
當然我上面說的只是最基本的原因,用socket還有非常多的原因是http實現不了的。 凡是http能實現的,socket都能實現,因為http也只是socket via tcp的一種應用場景的協議。
IM大都是在socket基礎上自己搞的一套傳輸協議,類似http,只不過是針對自己的業務開發的。
IM應用伺服器為了獲取用戶登入狀態要不停地發送「心跳包」確認用戶在線和用戶的網絡情況,用HTTP的話會有太多冗餘信息(HEADER,CONTENT-TYPE,STATUS)之類的。
很多IM應用為了安全性或壓縮資料會實現自己的網路協定。
http是一次性的,socket可以實現長連接,凡是一個來回網絡請求解決不了問題的都會用socket。
例如微信裡刷新朋友圈、下載圖片用http請求,收訊息因為這邊不知道什麼時候來訊息就搞個socket一直監聽,發訊息因為會比較頻繁用http每次都要重新握手所以也要用socket,還有音視訊通話,斷點續傳等等都要用socket。理論上啟動微信或斷網重連後的同步訊息可以用http去請求沒有收到的訊息,但因為諸多原因也是用socket。
當然我上面說的只是最基本的原因,用socket還有非常多的原因是http實現不了的。
凡是http能實現的,socket都能實現,因為http也只是socket via tcp的一種應用場景的協議。
IM大都是在socket基礎上自己搞的一套傳輸協議,類似http,只不過是針對自己的業務開發的。
IM應用伺服器為了獲取用戶登入狀態要不停地發送「心跳包」確認用戶在線和用戶的網絡情況,用HTTP的話會有太多冗餘信息(HEADER,CONTENT-TYPE,STATUS)之類的。
很多IM應用為了安全性或壓縮資料會實現自己的網路協定。