使用socketIO框架實現(xiàn)iOS的長連接

公司是做金融相關(guān),最近需要實現(xiàn)一個金融客戶端必不可少的東西:K線圖。這個東西如果是自己從頭來搞,可真的不是一件簡單的事,幸好,在這個領(lǐng)域有很多的先驅(qū),已經(jīng)在我們之前造好了輪子等著我們使用,一直對這些樂于分享,樂于開源的大神們抱有感激,希望有一天自己的知識和經(jīng)驗也能對后來人有所幫助。

說起K線圖,為了做好這個東西前期也已經(jīng)研究了很久,最終找到了一份算是不錯的K線圖demo,地址在這里:https://github.com/WillkYang/YYStock,
有興趣的可以去看看。但是這篇blog的重點不在K線圖上,而是如何實現(xiàn)長連接,讓服務(wù)端實時推送股票的相關(guān)信息給客戶端。長連接的技術(shù)我之前也是沒有接觸過,這次一次研究了個爽,找了很多的開源第三方的礦框架,包括:CocoaAsyncSocket:https://github.com/robbiehanson/CocoaAsyncSocket,
Facebook出品的SocketRocket https://github.com/facebook/SocketRocket,
以及今天要說道的socket.io https://github.com/socketio/socket.io-client-swift。
這三個可以實現(xiàn)長連接的框架,都很厲害,但是因為我們的服務(wù)端是用socket.io實現(xiàn)的,所以我們客戶端使用socket.io相關(guān)的也就最容易實現(xiàn)。
最新的是Socket.IO-Client-Swift,一個swift實現(xiàn)的Socket.IO框架,我們?nèi)绻褂胏ocopods的話,直接

pod 'Socket.IO-Client-Swift'

安裝好之后,實現(xiàn)長連接就比較簡單了:
1)首先在你的viewController中引入這個第三方,

@import SocketIO;

注意是@而不是#import,至于為何這樣寫請自行百度,這里就不贅述了。
2)引入好了框架,就開始連接

NSURL *url = [NSURL URLWithString:@"https://socketio-chat.now.sh/"];

//使用給定的url初始化一個socketIOClient,后面的config是對這個socket的一些配置,比如log設(shè)置為YES,控制臺會打印連接時的日志等
SocketIOClient *socket = [[SocketIOClient alloc] initWithSocketURL:url config:@{@"log": @YES, @"forcePolling": @YES}];

    //監(jiān)聽是否連接上服務(wù)器,正確連接走后面的回調(diào)
    [socket on:@"connect" callback:^(NSArray* data, SocketAckEmitter* ack) {
        NSLog(@"socket connected");
        [socket emit:@"kline_day" with:@[@"430009"]];
    }];
    //監(jiān)聽new message,這是socketIO官網(wǎng)提供的一個測試用例,大家都可以試試。如果成功連接,會收到data內(nèi)容。
    [socket on:@"new message" callback:^(NSArray* data, SocketAckEmitter* ack) {
        NSLog(@"response is %@",data);
    }];
    [socket connect];

一般我們真正開發(fā)中,需要給服務(wù)端傳遞規(guī)定好的關(guān)鍵字,服務(wù)端才會正確的返回你想獲取的數(shù)據(jù),這個時候就要用到emmit()方法:

[socket emit:@"kline_day" with:@[@"430009"]];

上面的意思就是請求服務(wù)器430009這個股票代碼的日k數(shù)據(jù),一般我們將這個請求放在監(jiān)聽連接成功的方法中。
如果想停止本次長連接,也很簡單,只需要用上面創(chuàng)建的socket對象調(diào)用disconnect()方法即可。

[self.socket disconnect];

這樣一個長連接就成功了,之后就是解析獲取到的數(shù)據(jù),這個數(shù)據(jù)是每隔一定時間服務(wù)器自動推送的,我們是需要把這些數(shù)據(jù)展示在頁面上即可。

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

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

  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,041評論 4 61
  • 千里之行,始于足下,一千里的距離要一步一步地走,緊盯目標,不要放棄,終會到達。我們在日常的學習工作中也要堅...
    寒梅怡人閱讀 905評論 2 0
  • 明知此日逢初八,正值春風拂柳斜。 跪地燒錢無限意,出郊祭祖萬千家。 不由各自心生孝,難得雙眸淚濕花。 縱是黃泉終有...
    雪窗_武立之閱讀 535評論 2 4
  • 一片樹林里分出兩條路,而我選擇了人跡更少的一條,從此決定了我一生的道路?!段催x擇的路》 ———— 男孩站在一條...
    你催我也沒有文閱讀 1,130評論 0 15
  • 想給學長學姐畢業(yè)禮物,總感覺自己什么都沒有,唯有平時你們對我的好 想給你們自己喜歡的書或者是喜歡的明信片,但你們不...
    隨心羈旅閱讀 752評論 0 1

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