最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

IOS中使用 CocoaAsyncSocket​

 更新時(shí)間:2016年02月14日 11:05:53   投稿:hebedich  
ios原生的socket用起來(lái)不是很直觀,所以我用的是CocoaAsyncSocket這個(gè)第三方庫(kù),對(duì)socket的封裝比較好,只是好像沒(méi)有帶外傳輸(out—of-band) 如果你的服務(wù)器需要發(fā)送帶外數(shù)據(jù),可能得想下別的辦法

Socket

如今在 iOS 里對(duì) Socket 的應(yīng)用慢慢多了起來(lái),就一個(gè)即時(shí)通訊,很多應(yīng)用都有集成,那即時(shí)通訊功能一般來(lái)說(shuō)就肯定是基于 Socket 的,Socket 這個(gè)話題我一直談?wù)摰谋容^少,一是由于看過(guò)一些 C/C++ 操作 Socket 的代碼被嚇到了一直還有心理陰影存在,二是工作里沒(méi)怎么遇到相關(guān)的需求應(yīng)用,所以也沒(méi)有去深入研究相關(guān)內(nèi)容。

還沒(méi)接觸過(guò) Socket 編程肯定也會(huì)聽說(shuō)過(guò)這幾個(gè)關(guān)鍵字:包、握手、連接、TCP、UDP 等等,Socket 編程的文章網(wǎng)上大把大把有,而作為一個(gè)初心者總是對(duì)這些 望文生怯,之前我也是如此,所以深有體會(huì),希望讀完本篇文章后你會(huì)對(duì) 在 iOS 平臺(tái)上的 Socket 編程有一個(gè)簡(jiǎn)單的了解,那就是不要怕!

Socket on iOS

在 iOS 上,哦不,應(yīng)該說(shuō) Cocoa 的世界里,Socket 編程應(yīng)該有以下幾種方式:

sys/socket.h - 系統(tǒng)底層 Socket 編程接口
CFNetwork - Core Foundation 中對(duì) socket 的封裝
NSStream - Cocoa 中對(duì) CFNetwork 的封裝
當(dāng)然,上面這些都是大哥級(jí)別的,但是就是不想寫C,我們小白當(dāng)然可以用用抽象更高的開源庫(kù),比如:

CocoaAsyncSocket
SocketRocket
Socket.IO
CocoaAsyncSocket

之前一直沒(méi)有機(jī)會(huì)在 iOS 平臺(tái)上寫 Socket,最近遇到一個(gè)需要用 Socket 做文件上傳下載的功能,那么 iOS 上做 Socket 編程大家都知道是 CocoaAsyncSocket 一家獨(dú)大,也木有發(fā)現(xiàn)其他更好的替代品,于是簡(jiǎn)單看了看文檔,就操刀上戰(zhàn)場(chǎng)了。

CocoaAsyncSocket 是一個(gè)純 Objective-C 的開源庫(kù),用起來(lái)非常簡(jiǎn)單,當(dāng)然也兼容了 Swift 的語(yǔ)法。

TCP & UDP

如果你看到 CocoaAsyncSocket 主頁(yè)的說(shuō)明應(yīng)該會(huì)注意到有 TCP 和 UDP 兩套接口,簡(jiǎn)單來(lái)說(shuō)就是 Socket 支持兩種協(xié)議,一個(gè)叫 TCP、一個(gè)叫 UDP;TCP 面向連接,每次請(qǐng)求需要幾次 “握手”,數(shù)據(jù)有序可靠;UDP 就簡(jiǎn)單點(diǎn),不握手了,發(fā)包也無(wú)序,不用保持連接,也不用一些其它的開傳輸開銷,帶寬消耗就更少。然后 CocoaAsyncSocket 針對(duì)于 TCP 和 UDP 分別封裝出來(lái)了兩套 API,命名分別以 TCP 或 UDP 打頭。

GCD & Run-loop

仔細(xì)觀察 CocoaAsyncSocket 對(duì)其類的命名可以發(fā)現(xiàn)除了 TCP 和 UDP 分拆成了兩套 API,一套時(shí)基于 GCD 程安全的 GCDAsyncSocket/GCDAsyncUdpSocket,一套是基于 Run-loop 的 AsyncSocket/AsyncUdpSocket,一般來(lái)說(shuō)我們用基于 GCD 的封裝就好了。

在實(shí)際應(yīng)用中我想大多數(shù)需求都是基于 TCP 的,所以我們主要看看 GCDAsyncSocket,看到 GCD 不要以為其所有回調(diào)都是 GCD 的,看了源碼你就知道所有回調(diào)全是 Delegate。

GCDAsyncSocket

一般 iOS 上 socket 做 client 端居多,所以用到的一些基本操作就是 connect、read、write、disconnect,GCDAsyncSocket 的封裝非常簡(jiǎn)單,初上手可能遇到的問(wèn)題就在于一個(gè)完整的 socket 操作流程的不清楚,只要摸清楚服務(wù)端的邏輯流程就很輕松了,比如需要先讀多少字節(jié),然后從結(jié)果中解析出某部分?jǐn)?shù)據(jù),然后再讀多少字節(jié),再分析數(shù)據(jù),再讀再寫...

總結(jié)

其實(shí) Socket 并沒(méi)有想象中的那么復(fù)雜,很多底層的工作框架都替我們做了,可以更集中精力在業(yè)務(wù)邏輯上。

相關(guān)文章

  • 解決ios手機(jī)中input輸入框光標(biāo)過(guò)長(zhǎng)的問(wèn)題

    解決ios手機(jī)中input輸入框光標(biāo)過(guò)長(zhǎng)的問(wèn)題

    在項(xiàng)目中做移動(dòng)端頁(yè)面,發(fā)現(xiàn)IOS 的光標(biāo)大小很大,和安卓的完全不一樣,怎么來(lái)調(diào)整大小呢?下面小編給大家?guī)?lái)了ios手機(jī)中input輸入框光標(biāo)過(guò)長(zhǎng)問(wèn)題的解決方法,一起看看吧
    2018-08-08
  • IOS開發(fā)Objective-C?Runtime使用示例詳解

    IOS開發(fā)Objective-C?Runtime使用示例詳解

    這篇文章主要為大家介紹了IOS開發(fā)Objective-C?Runtime使用示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-02-02
  • iOS App連續(xù)閃退時(shí)上報(bào)crash日志的方法詳解

    iOS App連續(xù)閃退時(shí)上報(bào)crash日志的方法詳解

    iOS App 有時(shí)可能遇到啟動(dòng)必 crash 的絕境:每次打開 App 都閃退,無(wú)法正常使用App。下面這篇文章主要給大家介紹了iOS App連續(xù)閃退時(shí)上報(bào)crash日志的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面來(lái)一起看看吧。
    2018-04-04
  • iOS runtime知識(shí)梳理

    iOS runtime知識(shí)梳理

    本文主要對(duì)iOS runtime的知識(shí)進(jìn)行梳理。具有一定的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-01-01
  • IOS上iframe的滾動(dòng)條失效的解決辦法

    IOS上iframe的滾動(dòng)條失效的解決辦法

    這篇文章主要為大家詳細(xì)介紹了IOS上iframe的滾動(dòng)條失效的解決辦法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2016-09-09
  • IOS實(shí)現(xiàn)自定義布局瀑布流

    IOS實(shí)現(xiàn)自定義布局瀑布流

    這篇文章主要介紹了IOS實(shí)現(xiàn)自定義布局瀑布流,畫面感非常炫麗,想要學(xué)習(xí)的朋友不要錯(cuò)過(guò)本文
    2016-01-01
  • iOS利用NSMutableAttributedString實(shí)現(xiàn)富文本的方法小結(jié)

    iOS利用NSMutableAttributedString實(shí)現(xiàn)富文本的方法小結(jié)

    這篇文章主要給大家介紹了關(guān)于iOS利用NSMutableAttributedString如何實(shí)現(xiàn)富文本的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2018-05-05
  • iOS使用核心的50行代碼擼一個(gè)路由組件

    iOS使用核心的50行代碼擼一個(gè)路由組件

    使用組件化是為了解耦處理,多個(gè)模塊之間通過(guò)協(xié)議進(jìn)行交互。本文給大家介紹iOS使用核心的50行代碼擼一個(gè)路由組件的相關(guān)知識(shí),需要的朋友可以參考下
    2018-09-09
  • IOS開發(fā)代碼分享之設(shè)置UISearchBar的背景顏色

    IOS開發(fā)代碼分享之設(shè)置UISearchBar的背景顏色

    在項(xiàng)目開發(fā)中,我們經(jīng)常要用到UISearchBar,在網(wǎng)上看到了很多關(guān)于去除掉他背景色的方法,都已經(jīng)失效了,今天來(lái)分享一個(gè)正常使用的方法,希望能幫到大家
    2014-09-09
  • iOS中在APP內(nèi)加入AppStore評(píng)分功能的實(shí)現(xiàn)方法

    iOS中在APP內(nèi)加入AppStore評(píng)分功能的實(shí)現(xiàn)方法

    這篇文章主要介紹了iOS中在APP內(nèi)加入AppStore評(píng)分功能的實(shí)現(xiàn)方法,文中筆者給大家整理了三種方式,大家可以根據(jù)自己的需求選擇,需要的朋友可以參考下
    2017-11-11

最新評(píng)論

龙江县| 石泉县| 西峡县| 东明县| 富顺县| 新干县| 久治县| 平利县| 类乌齐县| 丽江市| 阿尔山市| 永春县| 奈曼旗| 泗阳县| 宜良县| 临安市| 玉山县| 噶尔县| 罗平县| 黄梅县| 涞水县| 佛坪县| 达拉特旗| 彰武县| 龙南县| 琼海市| 建德市| 酉阳| 融水| 随州市| 阳春市| 宾阳县| 自贡市| 高阳县| 沙雅县| 阿坝县| 台东县| 开化县| 罗甸县| 西丰县| 旬阳县|