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

首頁 > 系統 > iOS > 正文

IOS中使用 CocoaAsyncSocket?

2019-10-21 18:56:01
字體:
來源:轉載
供稿:網友
ios原生的socket用起來不是很直觀,所以我用的是CocoaAsyncSocket這個第三方庫,對socket的封裝比較好,只是好像沒有帶外傳輸(out—of-band) 如果你的服務器需要發送帶外數據,可能得想下別的辦法
 

Socket

如今在 iOS 里對 Socket 的應用慢慢多了起來,就一個即時通訊,很多應用都有集成,那即時通訊功能一般來說就肯定是基于 Socket 的,Socket 這個話題我一直談論的比較少,一是由于看過一些 C/C++ 操作 Socket 的代碼被嚇到了一直還有心理陰影存在,二是工作里沒怎么遇到相關的需求應用,所以也沒有去深入研究相關內容。

還沒接觸過 Socket 編程肯定也會聽說過這幾個關鍵字:包、握手、連接、TCP、UDP 等等,Socket 編程的文章網上大把大把有,而作為一個初心者總是對這些 望文生怯,之前我也是如此,所以深有體會,希望讀完本篇文章后你會對 在 iOS 平臺上的 Socket 編程有一個簡單的了解,那就是不要怕!

Socket on iOS

在 iOS 上,哦不,應該說 Cocoa 的世界里,Socket 編程應該有以下幾種方式:

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

CocoaAsyncSocket
SocketRocket
Socket.IO
CocoaAsyncSocket

之前一直沒有機會在 iOS 平臺上寫 Socket,最近遇到一個需要用 Socket 做文件上傳下載的功能,那么 iOS 上做 Socket 編程大家都知道是 CocoaAsyncSocket 一家獨大,也木有發現其他更好的替代品,于是簡單看了看文檔,就操刀上戰場了。

CocoaAsyncSocket 是一個純 Objective-C 的開源庫,用起來非常簡單,當然也兼容了 Swift 的語法。

TCP & UDP

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

GCD & Run-loop

仔細觀察 CocoaAsyncSocket 對其類的命名可以發現除了 TCP 和 UDP 分拆成了兩套 API,一套時基于 GCD 程安全的 GCDAsyncSocket/GCDAsyncUdpSocket,一套是基于 Run-loop 的 AsyncSocket/AsyncUdpSocket,一般來說我們用基于 GCD 的封裝就好了。

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

GCDAsyncSocket

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

總結

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



注:相關教程知識閱讀請移步到IOS開發頻道。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 甘谷县| 方城县| 额敏县| 台山市| 宣汉县| 台山市| 东辽县| 盐津县| 赤城县| 平乡县| 高青县| 枝江市| 丹东市| 西充县| 海晏县| 汪清县| 吉林市| 瑞昌市| 潢川县| 依兰县| 汽车| 集安市| 张家川| 得荣县| 灯塔市| 玉龙| 九江县| 高密市| 武威市| 瓦房店市| 满洲里市| 蛟河市| 安吉县| 遂溪县| 科尔| 剑川县| 遂平县| 都兰县| 永嘉县| 静乐县| 宜昌市|