接入WebSocket記錄 一些個人經驗

2022-06-18 17:18:14 字數 2007 閱讀 6919

閒扯

為什麼用 websocket

用法用 socketrocket 框架,記住幾個**方法就好了,很簡單。

1.建立和設定**物件12

3456

srwebsocket *socket = [[srwebsocket alloc] initwithurlrequest:

[nsurlrequest requestwithurl:[nsurl urlwithstring:@]];

socket.delegate = self;// 實現這個 srwebsocketdelegate 協議啊

[socket open];// open 就是直接連線了

2.連線成功會呼叫這個**方法12

3- (void)websocketdidopen:(srwebsocket *)websocket

3.連線失敗會呼叫這個方法,看 nslog 裡面的東西12

3456

7- (void)websocket:(srwebsocket *)websocket didfailwitherror:(nserror *)error

4.連線關閉呼叫這個方法,注意連線關閉不是連線斷開,關閉是 [socket close] 客戶端主動關閉,斷開可能是斷網了,被動斷開的。12

3- (void)websocket:(srwebsocket *)websocket didclosewithcode:(nsinteger)code reason:(nsstring *)reason wasclean:(bool)wasclean

5.收到伺服器發來的資料會呼叫這個方法12

3456

- (void)websocket:(srwebsocket *)websocket didreceivemessage:(id)message

6.向伺服器傳送資料

傳送的時候可能斷網,可能socket還在連線,要判斷一些情況,寫在下面了

傳送邏輯是,我有乙個 socketqueue 的序列佇列,傳送請求會加到這個佇列裡,然後乙個乙個發出去,如果掉線了,重連連上後繼續傳送,對呼叫層透明,呼叫層不需要知道網路斷開了。12

3456

78910

1112

1314

1516

1718

1920

2122

2324

2526

2728

- (void)senddata:(id)dataelseif(ws.socket.readystate == sr_connecting)elseif(ws.socket.readystate == sr_closing || ws.socket.readystate == sr_closed) ];

}

}else

});

}

7.心跳機制

心跳機制就不難了,開個定時器,問下後台要每隔多少秒傳送一次心跳請求就好了。然後注意,斷網了或者socket斷開的時候把心跳關一下,省資源,不然都斷網了,還在迴圈發心跳,浪費cpu和電量。

接入WebSocket記錄 一些個人經驗

閒扯 為什麼用 websocket 用法用 socketrocket 框架,記住幾個 方法就好了,很簡單。1.建立和設定 物件 1 2 3 4 5 6 srwebsocket socket srwebsocket alloc initwithurlrequest nsurlrequest reque...

Websocket的一些資訊

html5的websocket api 它可用於客戶端 伺服器端。websocket api是下一代客戶端 伺服器的非同步通訊方法。該通訊取代了單個的tcp套接字,使用ws或wss協議,可用於任意的客戶端和伺服器程式。websocket目前由w3c進行標準化。websocket已經受到firefox...

記錄一些WPF

1.exception 使用該資訊可以確定如何處理異常。handled 屬性設定為true2.3.invoke 是同步操作,而 begininvoke 是非同步操作 4.pack uri 方案使用 pack 作為它的方案,並且包含兩個元件 授權和路徑。以下是 pack uri 的格式。pack 授權...