并發(fā)網(wǎng)絡請求工具

最近項目中出現(xiàn)一個需求.就是有可能要對成百甚至上千條數(shù)據(jù)進行修改. 但是服務器那邊不愿意提供批量操作的接口. 只能自己實現(xiàn)了. 首先感謝AFNetworking. 因為他.我才能方便的實現(xiàn)這個需求.

先說思路吧. 手機的內(nèi)存是有限的, 我們?nèi)绻活櫤蠊?一次性創(chuàng)建大量的請求發(fā)出, 這絕對是會影響性能的. 所以我們要限制請求的最大并發(fā)數(shù),同一時間最多只能發(fā)送5個或者10個的請求, 某個請求完成了,就繼續(xù)發(fā)送下個請求.

直接上代碼.先是.h.

QQ20160612-0.png

首先我們來看看代碼:
name是該工具的名字. 方便在接下來的使用.
代理的作用是當全部任務執(zhí)行完畢的時候告訴外面.
參數(shù)數(shù)組是用于發(fā)送請求的,可以在創(chuàng)建這個類的時候賦值,或者在之后賦值.
接下來是一個bool.該值決定是否要繼續(xù)執(zhí)行任務.
最后是一個開始任務的方法,通過block執(zhí)行回調(diào).

然后是.m:


QQ20160612-1.png

這里有個manager屬性.是用于發(fā)送請求的.
然后就是在創(chuàng)建對象的時候調(diào)用一個baseSetUp方法,對manager初始化.

接下來就是具體發(fā)送請求的方法:

QQ20160612-5.png

首先判斷是否被cancel了. 是的話.就直接調(diào)用代理方法
然后再判斷參數(shù)數(shù)組的個數(shù)是否為0, 如果不是的話,就取出數(shù)組的第一個參數(shù), 使用manager發(fā)出, 在成功或者失敗的回調(diào)里面, 先把參數(shù)從數(shù)組中移除, 然后通過自身的block把參數(shù)告訴外面. 再繼續(xù)調(diào)用這個方法.
直到最后請求數(shù)組已經(jīng)為空了. 就調(diào)用代理方法告訴外界所有任務都已經(jīng)處理完畢了.

這就是這個工具類的全部了. 但是這個工具也只是實現(xiàn)了同一時間發(fā)送一個請求. 請求回來后,無論成功與否,都繼續(xù)發(fā)送下個請求. 與并發(fā)請求還差著十萬八千里呢.

所以我們需要創(chuàng)建一個管理類, 專門管理多個工具.有10個工具,我們就能同時發(fā)送10個請求了.
先是.h文件:

QQ20160614-5.png

屬性的話只有兩個,一個是最大并發(fā)數(shù),一個是代理.
然后是創(chuàng)建方法, 還有開始任務,以及取消任務的方法.
代理的話,就是成功,失敗,以及所有任務完畢后的回調(diào).

然后是.m文件:

QQ20160612-8.png

屬性的話也只有兩個. 一個是用于保存工具的數(shù)組,一個是已完成任務的個數(shù).
然后是方法, 重寫了最大并發(fā)數(shù)的set方法.

然后是開始任務的時候,需要給工具派發(fā)任務. 派發(fā)任務是把請求的個數(shù)平分. 當然,最后一個工具的任務不一定平均數(shù),需要特殊處理.
派發(fā)完畢之后,就遍歷工具數(shù)組, 依次發(fā)起請求.我們再通過回調(diào)告訴外界.


QQ20160614-6.png

然后是取消任務的方法,也是遍歷,設置工具的cacel屬性為yes就可以了.
最后.當某個工具任務執(zhí)行完畢后,就會調(diào)用工具的完成任務的回調(diào)方法. 在這里,我們做個判斷. 當全部執(zhí)行完畢后, 再告訴外界就可以了.

QQ20160614-7.png

github上demo的地址:https://github.com/byljbdh/ALNMultipleNetworkTool

以上.

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關(guān)閱讀更多精彩內(nèi)容

  • 國家電網(wǎng)公司企業(yè)標準(Q/GDW)- 面向?qū)ο蟮挠秒娦畔?shù)據(jù)交換協(xié)議 - 報批稿:20170802 前言: 排版 ...
    庭說閱讀 12,444評論 6 13
  • AFHTTPRequestOperationManager 網(wǎng)絡傳輸協(xié)議UDP、TCP、Http、Socket、X...
    Carden閱讀 5,322評論 0 12
  • Spring Cloud為開發(fā)人員提供了快速構(gòu)建分布式系統(tǒng)中一些常見模式的工具(例如配置管理,服務發(fā)現(xiàn),斷路器,智...
    卡卡羅2017閱讀 136,628評論 19 139
  • iOS網(wǎng)絡架構(gòu)討論梳理整理中。。。 其實如果沒有APIManager這一層是沒法使用delegate的,畢竟多個單...
    yhtang閱讀 5,491評論 1 23
  • 你站在星空之下, 讀不懂這世界的變化。 有誰能走進你, 走進你的心, 許你一世繁華, 陪你,看盡落日流霞, 陪你,...
    米何閱讀 583評論 4 7

友情鏈接更多精彩內(nèi)容