国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 系統(tǒng) > iOS > 正文

IOS中使用 CocoaAsyncSocket​

2020-07-26 03:28:05
字體:
供稿:網(wǎng)友

Socket

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

還沒接觸過 Socket 編程肯定也會(huì)聽說過這幾個(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)該說 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

之前一直沒有機(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ù),用起來非常簡(jiǎn)單,當(dāng)然也兼容了 Swift 的語(yǔ)法。

TCP & UDP

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

GCD & Run-loop

仔細(xì)觀察 CocoaAsyncSocket 對(duì)其類的命名可以發(fā)現(xiàn)除了 TCP 和 UDP 分拆成了兩套 API,一套時(shí)基于 GCD 程安全的 GCDAsyncSocket/GCDAsyncUdpSocket,一套是基于 Run-loop 的 AsyncSocket/AsyncUdpSocket,一般來說我們用基于 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)單,初上手可能遇到的問題就在于一個(gè)完整的 socket 操作流程的不清楚,只要摸清楚服務(wù)端的邏輯流程就很輕松了,比如需要先讀多少字節(jié),然后從結(jié)果中解析出某部分?jǐn)?shù)據(jù),然后再讀多少字節(jié),再分析數(shù)據(jù),再讀再寫...

總結(jié)

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

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 宜良县| 江阴市| 莎车县| 肥城市| 南陵县| 乌审旗| 蒙自县| 浦县| 张家港市| 噶尔县| 沈丘县| 科技| 乌拉特中旗| 错那县| 霞浦县| 武陟县| 抚远县| 行唐县| 临夏县| 古蔺县| 淮北市| 广宗县| 资溪县| 寻乌县| 拉萨市| 丰镇市| 屯留县| 山东省| 汉寿县| 盈江县| 祁门县| 钟山县| 正安县| 洛浦县| 石河子市| 泸西县| 台湾省| 喀喇沁旗| 瓮安县| 南宫市| 正宁县|