websocket簡介
websocket協議是基於tcp的一種新的網路協議。它實現了瀏覽器與伺服器全雙工(full-duplex)通訊——允許伺服器主動傳送資訊給客戶端。
websocket通訊協議於2023年被ietf定為標準rfc 6455,並被rfc7936所補充規範。
websocket實現原理
在實現websocket連線過程中,需要通過瀏覽器發出websocket連線請求,然後伺服器發出回應,這個過程通常稱為「握手」 。在 websocket api,瀏覽器和伺服器只需要做乙個握手的動作,然後,瀏覽器和伺服器之間就形成了一條快速通道。兩者之間就直接可以資料互相傳送。在此websocket 協議中,為我們實現即時服務帶來了兩大好處:
1. header
互相溝通的header是很小的-大概只有 2 bytes
2. server push
伺服器的推送,伺服器不再被動的接收到瀏覽器的請求之後才返回資料,而是在有新資料時就主動推送給瀏覽器。
為什麼我們需要websocket這樣的實時的通訊協議?
websocket是web通訊方式的一種,像我們熟知的http協議也是web通訊方式的一種。但是我們知道http協議是一種無狀態的協議,其服務端本身不具備識別客戶端的能力,必須借助外部的一些資訊比如說session和cookie,才能與特定的客戶端保持通訊。也就是說我們所傳送的每乙個http的請求都會帶上請求頭中一些相應的資訊還有cookie,這明顯會增加我們傳輸的資訊的體量從而帶來一定的網路延遲,對於一些對通訊的實時性要求比較高的應用來說就是不可忍受的了,比如說聊天程式或者是執行在瀏覽器中的實時小遊戲。最鬱悶的卻還是這些頭資訊和cookie往往對於伺服器響應客戶端的請求來說是多餘的,也就是說雖然每個請求都帶了這些資訊,但是伺服器與客戶端的互動過程中可能根本用不上這些資訊。
為了改善http請求的這種網路延遲的情況,也出現了一些適應不同需求的其他的[web通訊]方式,比如說:輪詢,長輪詢(long-polling),資料流,eventsouce等等,websocket便是其中一種。
websocket整合
1.cocoapods配置
pod 'socketrocket'
2.匯入標頭檔案,並設定**
#import @inte***ce homecontroller ()
3.實現**
- (void)viewdidload
self.websocket.delegate = nil;
[self.websocket close];
self.websocket = nil;
}- (srwebsocket *)websocket
return _websocket;
}#pragma mark - srwebsocketdelegate
- (void)websocketdidopen:(srwebsocket *)websocket
// 連線失敗
- (void)websocket:(srwebsocket *)websocket didfailwitherror:(nserror *)error
// 接收到新訊息的處理
- (void)websocket:(srwebsocket *)websocket didreceivemessage:(id)message
// 連線關閉
- (void)websocket:(srwebsocket *)websocket didclosewithcode:(nsinteger)code reason:(nsstring *)reason wasclean:(bool)wasclean
簡單的設計不簡單
最近看了 簡約至上 這本書,這本文章總結一下。推薦給對互動設計感興趣的童鞋。話說簡單 首先人們喜歡簡單 值得信賴 適應性強的產品。所以我們才會費盡心力去設計簡單的產品。人們喜歡簡單的產品原因有 1 產品的功能越多,就越難發現真正對使用者有價值的新功能。2 因為增加的複雜性導致他們很難找到自己真正需要...
簡單的設計不簡單
最近看了 簡約至上 這本書,這本文章總結一下。推薦給對互動設計感興趣的童鞋。話說簡單 首先人們喜歡簡單 值得信賴 適應性強的產品。所以我們才會費盡心力去設計簡單的產品。人們喜歡簡單的產品原因有 1 產品的功能越多,就越難發現真正對使用者有價值的新功能。2 因為增加的複雜性導致他們很難找到自己真正需要...
簡單的設計不簡單
最近看了 簡約至上 這本書,這本文章總結一下。推薦給對互動設計感興趣的童鞋。話說簡單 首先人們喜歡簡單 值得信賴 適應性強的產品。所以我們才會費盡心力去設計簡單的產品。人們喜歡簡單的產品原因有 1 產品的功能越多,就越難發現真正對使用者有價值的新功能。2 因為增加的複雜性導致他們很難找到自己真正需要...