色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

您好,歡迎來電子發(fā)燒友網(wǎng)! ,新用戶?[免費注冊]

您的位置:電子發(fā)燒友網(wǎng)>源碼下載>通訊/手機(jī)編程>

iOS系統(tǒng)SRWebSocket的源碼解析上

大小:0.2 MB 人氣:1 2017-09-25 需要積分:1

  一。 前言:

  WebSocket協(xié)議是基于TCP的一種新的網(wǎng)絡(luò)協(xié)議。它實現(xiàn)了瀏覽器與服務(wù)器全雙工(full-duplex)通信——可以通俗的解釋為服務(wù)器主動發(fā)送信息給客戶端。

  區(qū)別于MQTT、XMPP等聊天的應(yīng)用層協(xié)議,它是一個傳輸通訊協(xié)議。它有著自己一套連接握手,以及數(shù)據(jù)傳輸?shù)囊?guī)范。

  而本文要講到的SRWebSocket就是iOS中使用websocket必用的一個框架,它是用Facebook提供的。

  關(guān)于WebSocket起源與發(fā)展,是怎么由:輪詢、長輪詢、再到websocket的,可以看看冰霜這篇文章:

  微信,QQ這類IM app怎么做——談?wù)刉ebsocket

  關(guān)于SRWebSocket的API用法,可以看看樓主之前這篇文章:

  iOS即時通訊,從入門到“放棄”?

  二。 SRWebSocket的對外的業(yè)務(wù)流程:

  首先貼一段SRWebSocket的API調(diào)用代碼:

  //初始化socket并且連接

  - (void)connectServer:(NSString *)server port:(NSString *)port

  {

  NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:[NSString stringWithFormat:@“ws://%@:%@”,server,port]]];

  _socket = [[SRWebSocket alloc] initWithURLRequest:request];

  _socket.delegate = self;

  [_socket open];

  }

  - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message

  {

  }

  - (void)webSocketDidOpen:(SRWebSocket *)webSocket

  {

  }

  - (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error

  {

  }

  - (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean

  {

  }

  要簡單使用起來,總共就4行代碼,并且實現(xiàn)你需要的代理即可,整個業(yè)務(wù)邏輯非常簡潔。

  但是就這么幾個對外的方法,SRWebSocket.m里面用了2000行代碼來進(jìn)行封裝,那么它到底做了什么?我們接著往下看:

  三。 SRWebSocket的初始化以及連接流程:

  1首先我們初始化:

  //初始化

  - (void)_SR_commonInit;

  {

  //得到url schem小寫

  NSString *scheme = _url.scheme.lowercaseString;

  //如果不是這幾種,則斷言錯誤

  assert([scheme isEqualToString:@“ws”] || [scheme isEqualToString:@“http”] || [scheme isEqualToString:@“wss”] || [scheme isEqualToString:@“https”]);

  _readyState = SR_CONNECTING;

  _webSocketVersion = 13;

  //初始化工作的隊列,串行

  _workQueue = dispatch_queue_create(NULL, DISPATCH_QUEUE_SERIAL);

  //給隊列設(shè)置一個標(biāo)識,標(biāo)識為指向自己的,上下文對象為這個隊列

  dispatch_queue_set_specific(_workQueue, (__bridge void *)self, maybe_bridge(_workQueue), NULL);

  //設(shè)置代理queue為主隊列

  _delegateDispatchQueue = dispatch_get_main_queue();

  //retain主隊列?

  sr_dispatch_retain(_delegateDispatchQueue);

  //讀Buffer

  _readBuffer = [[NSMutableData alloc] init];

  //輸出Buffer

  _outputBuffer = [[NSMutableData alloc] init];

  //當(dāng)前數(shù)據(jù)幀

  _currentFrameData = [[NSMutableData alloc] init];

  //消費者數(shù)據(jù)幀的對象

  _consumers = [[NSMutableArray alloc] init];

  _consumerPool = [[SRIOConsumerPool alloc] init];

  //注冊的runloop

  _scheduledRunloops = [[NSMutableSet alloc] init];

  。。.。省略了一部分代碼

  }

  會初始化一些屬性:

  包括對schem進(jìn)行斷言,只支持ws/wss/http/https四種。

  當(dāng)前socket狀態(tài),是正在連接,還是已連接、斷開等等。

  初始化工作隊列,以及流回調(diào)線程等等。

非常好我支持^.^

(41) 50%

不好我反對

(41) 50%

用戶評論

      ?
      主站蜘蛛池模板: 91精品视频网站 | 国产乱码伦人偷精品视频 | 黄页网站18以下勿看免费 | 一本色道久久综合一区 | 国产精品高潮AV久久无码 | 伊人无码高清 | 麻豆一区二区免费播放网站 | 在线AV国产传媒18精品免费 | 成人亚洲视频 | 亚洲国产精品天堂在线播放 | ca88亚洲城娱乐 | 蜜桃成熟时2电影免费观看d | 亚洲三级黄色 | 国产成人精品综合在线 | 97精品在线 | 亚洲欧美另类无码专区 | 青青视频 在线 在线播放 | 亚洲AV色香蕉一区二区三区 | 91久久线看在观草草青青 | 亚洲区偷拍自拍29P 亚洲区视频在线观看 | 法国剧丝袜情版h级在线电影 | 伊人久久国产 | 嗯 用力啊 嗯 c我 啊哈老师 | 在线观看永久免费网站 | 最近2019年日本中文免费字幕 | 动态抽插图视频 | 日本免费一区二区三区四区五六区 | 亚洲AV无码乱码A片无码蜜桃 | 涩涩在线视频 | 亚洲 日韩 国产 中文视频 | 美女张开腿让我了一夜 | 国产SUV精品一区二区883 | 乌克兰成人性色生活片 | 亚洲 日韩 国产 中文视频 | 亚洲欧美日韩国产另类电影 | 日本熟妇乱人伦A片精品软件 | 欧美精品九九99久久在免费线 | 国产成人精品免费视频大全可播放的 | 在线观看免费视频播放视频 | 亚洲天堂久久久 | 国产精品综合AV一区二区国产馆 |