接入WebSocket記錄 一些個人經驗

2021-09-07 14:24:45 字數 2690 閱讀 8568

閒扯

為什麼用 websocket

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

1.建立和設定**物件

1

2

3

4

5

6

srwebsocket *socket = [[srwebsocket alloc] initwithurlrequest:

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

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

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

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

1

2

3

- (void)websocketdidopen:(srwebsocket *)websocket

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

1

2

3

4

5

6

7

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

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

1

2

3

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

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

1

2

3

4

5

6

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

6.向伺服器傳送資料

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

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

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

- (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.建立和設定 物件12 3456 srwebsocket socket srwebsocket alloc initwithurlrequest nsurlrequest requestwit...

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 授權...