在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

您好,歡迎來電子發燒友網! ,新用戶?[免費注冊]

您的位置:電子發燒友網>源碼下載>通訊/手機編程>

iOS系統SRWebSocket的源碼解析上

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

  一。 前言:

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

  區別于MQTT、XMPP等聊天的應用層協議,它是一個傳輸通訊協議。它有著自己一套連接握手,以及數據傳輸的規范。

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

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

  微信,QQ這類IM app怎么做——談談Websocket

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

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

  二。 SRWebSocket的對外的業務流程:

  首先貼一段SRWebSocket的API調用代碼:

  //初始化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行代碼,并且實現你需要的代理即可,整個業務邏輯非常簡潔。

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

  三。 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);

  //給隊列設置一個標識,標識為指向自己的,上下文對象為這個隊列

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

  //設置代理queue為主隊列

  _delegateDispatchQueue = dispatch_get_main_queue();

  //retain主隊列?

  sr_dispatch_retain(_delegateDispatchQueue);

  //讀Buffer

  _readBuffer = [[NSMutableData alloc] init];

  //輸出Buffer

  _outputBuffer = [[NSMutableData alloc] init];

  //當前數據幀

  _currentFrameData = [[NSMutableData alloc] init];

  //消費者數據幀的對象

  _consumers = [[NSMutableArray alloc] init];

  _consumerPool = [[SRIOConsumerPool alloc] init];

  //注冊的runloop

  _scheduledRunloops = [[NSMutableSet alloc] init];

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

  }

  會初始化一些屬性:

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

  當前socket狀態,是正在連接,還是已連接、斷開等等。

  初始化工作隊列,以及流回調線程等等。

非常好我支持^.^

(41) 50%

不好我反對

(41) 50%

      發表評論

      用戶評論
      評價:好評中評差評

      發表評論,獲取積分! 請遵守相關規定!

      ?
      主站蜘蛛池模板: 午夜影视在线免费观看 | 欧美一区二区视频三区 | 天天干夜夜操 | 色噜噜狠狠成人中文小说 | 天天色天天做 | 伊人成年综合网 | 高清不卡一区二区三区 | 中文字幕欧美日韩 | 亚洲第一成网站 | 日本v片免费一区二区三区 日本www.色 日本wwwwww | 日本口工福利漫画无遮挡 | 日本暴力喉深到呕吐hd | 欧美综合精品一区二区三区 | 欧美ol丝袜高跟秘书在线观看 | 欧美一级高清片欧美国产欧美 | 在线观看色视频网站 | 亚洲综合精品香蕉久久网97 | 午夜影院0606 | 久久夜色精品国产亚洲 | 午夜小片 | 三级黄网 | 亚洲精品视频专区 | 天天视频观看 | 乱妇伦小说| 国产综合色精品一区二区三区 | 黄字幕网 | 四虎永久免费网站 | 看全黄大片狐狸视频在线观看 | 高清一区二区三区免费 | 男啪女色黄无遮挡免费观看 | 亚洲综合激情网 | 国产色婷婷精品综合在线手机播放 | 五月婷婷之综合激情 | 黑人影院| 色综合久久久久久久久五月性色 | 日本一区二区三区四区视频 | 国产美女视频爽爽爽 | 人人上人人干 | 国产又黄又爽又猛的免费视频播放 | 男人的天堂视频网站清风阁 | 亚洲天天做日日做天天欢毛片 |