一、前言
? ? ? ? 在本文中我使用的websocket框架是FaceBook提供的SocketRocket框架硼瓣,在此不再為此進行過多的介紹韧献,網(wǎng)上websocket介紹很全舌劳,如:SRWebSocket源碼淺析?竣贪,還有理解websocket的文章:WebSocket原理?等军洼。本文著重敘述在使用WebSocket與服務(wù)器對接時遇到的問題。
二演怎、問題及解決方法
? ? ? ? 1匕争、連接失敗,錯誤信息:?Error Domain=NSPOSIXErrorDomain Code=61 "Connection refused" UserInfo={_kCFStreamErrorCodeKey=61, _kCFStreamErrorDomainKey=1}
? ? ? ? 解析:61錯誤是:服務(wù)器端口沒打開
? ? ? ? 解決辦法:檢查服務(wù)器是否開啟端口爷耀。若服務(wù)器使用的是別人的服務(wù)器甘桑,使用各種抓包軟件抓一下是否在連接websocket前使用post或者get方法請求一遍,模擬一下發(fā)送的參數(shù),看看是否將其端口開啟扇住。
? ? ? ? 2、連接成功盗胀,立刻斷開艘蹋,斷開信息:code:1001 reason :Stream end encountered wasclean:0
? ? ? ? 解析:1001,表示“離開”(going away)票灰,例如服務(wù)器關(guān)閉或瀏覽器導(dǎo)航到其他頁面
? ? ? ? 解決辦法:檢查socket初始化方法女阀,與socket協(xié)議進行比較(抓包連接情況),使用
- (id)initWithURLRequest:(NSURLRequest*)request protocols:(NSArray*)protocols allowsUntrustedSSLCertificates:(BOOL)allowsUntrustedSSLCertificates; 方法初始化socket對象屑迂。在protocols數(shù)組中裝著協(xié)議內(nèi)容浸策,如:_protocolsArray = @[@"XXX"]; 其中,XXX為抓包出來的protocol內(nèi)容惹盼,如圖所示:
? ? ? ? 3庸汗、連接成功,有收到心跳信息手报,然后斷開蚯舱,斷開信息:code:1001 reason :Stream end encountered wasclean:0
? ? ? ? 解析:1001,離開掩蛤。在收到心跳包的情況下枉昏,出現(xiàn)斷開,這種情況只有服務(wù)器發(fā)送心跳包給你揍鸟,你沒有回復(fù)服務(wù)器兄裂,服務(wù)器默認(rèn)你離開了。
? ? ? ? 解決方法:回復(fù)心跳包給服務(wù)器阳藻,心跳包一問一答的對話方式保持socket連接晰奖。
? ? ? ? 至此,前兩個小問題都解決好了腥泥,這兩個小問題卡了我快一周的時間畅涂,記錄一下。
參考文檔:WebSocket關(guān)閉連接
? ??????????????????WebSocket_API的使用