當前位置:股票大全官網 - 財經新聞 - 記websocket遇到的問題以及解決方法

記websocket遇到的問題以及解決方法

在本文中我使用的websocket框架是FaceBook提供的SocketRocket框架,在此不再為此進行過多的介紹,網上websocket介紹很全,如: SRWebSocket源碼淺析 ?,還有理解websocket的文章: WebSocket原理 ?等。本文著重敘述在使用WebSocket與服務器對接時遇到的問題。

1、連接失敗,錯誤信息: ?Error Domain=NSPOSIXErrorDomain Code=61 "Connection refused" UserInfo={_kCFStreamErrorCodeKey=61, _kCFStreamErrorDomainKey=1}

解析:61錯誤是:服務器端口沒打開

解決辦法:檢查服務器是否開啟端口。若服務器使用的是別人的服務器,使用各種抓包軟件抓壹下是否在連接websocket前使用post或者get方法請求壹遍,模擬壹下發送的參數,看看是否將其端口開啟。

2、連接成功,立刻斷開,斷開信息: code:1001 reason :Stream end encountered wasclean:0

解析:1001,表示“離開”(going away),例如服務器關閉或瀏覽器導航到其他頁面

解決辦法:檢查socket初始化方法,與socket協議進行比較(抓包連接情況),使用

- (id)initWithURLRequest:(NSURLRequest*)request protocols:(NSArray*)protocols allowsUntrustedSSLCertificates:(BOOL)allowsUntrustedSSLCertificates; 方法初始化socket對象。在protocols數組中裝著協議內容,如:_protocolsArray = @[@"XXX"]; 其中,XXX為抓包出來的protocol內容,如圖所示:

3、連接成功,有收到心跳信息,然後斷開,斷開信息: code:1001 reason :Stream end encountered wasclean:0

解析:1001,離開。在收到心跳包的情況下,出現斷開,這種情況只有服務器發送心跳包給妳,妳沒有回復服務器,服務器默認妳離開了。

解決方法:回復心跳包給服務器,心跳包壹問壹答的對話方式保持socket連接。

至此,前兩個小問題都解決好了,這兩個小問題卡了我快壹周的時間,記錄壹下。

參考文檔: WebSocket關閉連接

WebSocket_API的使用