socket通訊目前用得比較多的有AsyncSocket與GCDAsyncSocket兩個(gè)類包。gcd可以將socket與隊(duì)列綁定,很多方法都已經(jīng)被作者封裝到協(xié)議里面了。
1、關(guān)于socket對象建議做成全局的對象,因?yàn)槊總€(gè)進(jìn)程都是連接一個(gè)socket,所以至于是單例還是全局變量看自己定義。
2、對于經(jīng)常說的心跳連接:如果不發(fā)數(shù)據(jù)的話,你不知道另一頭是不是斷了,這樣就可能會(huì)出現(xiàn)占用好多資源的情況,所以實(shí)踐里對keepalive的連接,是要隔一段時(shí)間就發(fā)一下數(shù)據(jù)看看另一頭有沒有反應(yīng)的,所以使用心跳包來判斷服務(wù)端是否還與自己保持連接。所以在做一些需要長時(shí)間連接的操作的時(shí)候最好定時(shí)給服務(wù)端發(fā)送一些數(shù)據(jù),這樣能準(zhǔn)確的判斷是否斷線
3、[self.socket readDataWithTimeout:30 tag:0];每次收到數(shù)據(jù)之后都要循環(huán)讀取數(shù)據(jù),防止數(shù)據(jù)丟失。關(guān)于tag還有一個(gè)好處就是可以根據(jù)業(yè)務(wù)邏輯進(jìn)行定義比如:tag:0=心跳包,tag:1=控制命令,tag:2=圖片,tag:3=視頻。。。
代碼就不貼了,有不懂的可以給我留言,其實(shí)資料很多,仔細(xì)看就能發(fā)現(xiàn)。socket通訊很容易入門,但是需要注意的細(xì)節(jié)還是很多。