iOS使用socketIO实现长连接
2017-06-08 19:57
423 查看
公司是做金融相关,最近需要实现一个金融客户端必不可少的东西:K线图。这个东西如果是自己从头来搞,可真的不是一件简单的事,幸好,在这个领域有很多的先驱,已经在我们之前造好了轮子等着我们使用,一直对这些乐于分享,乐于开源的大神们抱有感激,希望有一天自己的知识和经验也能对后来人有所帮助。
说起K线图,为了做好这个东西前期已经研究了很久,最终找到了一份算是不错的K线图demo,地址在这里:https://github.com/WillkYang/YYStock,有兴趣的可以去看看。但是这篇blog的重点不在K线图上,而是如何实现长连接,让服务端实时推送股票的相关信息给客户端。长连接的技术我之前也是没有接触过,这次一次研究了个爽,找了很多的开源第三方的矿框架,包括:CocoaAsyncSocket:https://github.com/robbiehanson/CocoaAsyncSocket,Facebook出品的SocketRocket https://github.com/facebook/SocketRocket,以及今天要说道的socket.io https://github.com/socketio/socket.io-client-swift。这三个可以实现长连接的框架,都很厉害,但是因为我们的服务端是用socket.io实现的,所以我们客户端使用socket.io相关的也就最容易实现。
最新的是Socket.IO-Client-Swift,一个swift实现的Socket.IO框架,我们如果使用cocopods的话,直接
pod ‘Socket.IO-Client-Swift’
安装好之后,实现长连接就比较简单了:
1)首先在你的viewController中引入这个第三方,
注意是@而不是#import,至于为何这样写请自行百度,这里就不赘述了。
2)引入好了框架,就开始连接
一般我们真正开发中,需要给服务端传递规定好的关键字,服务端才会正确的返回你想获取的数据,这个时候就要用到emmit()方法:
上面的意思就是请求服务器430009这个股票代码的日k数据,一般我们将这个请求放在监听连接成功的方法中。
如果想停止本次长连接,也很简单,只需要用上面创建的socket对象调用disconnect()方法即可。
这样一个长连接就成功了,之后就是解析获取到的数据,这个数据是每隔一定时间服务器自动推送的,我们是需要把这些数据展示在页面上即可。
说起K线图,为了做好这个东西前期已经研究了很久,最终找到了一份算是不错的K线图demo,地址在这里:https://github.com/WillkYang/YYStock,有兴趣的可以去看看。但是这篇blog的重点不在K线图上,而是如何实现长连接,让服务端实时推送股票的相关信息给客户端。长连接的技术我之前也是没有接触过,这次一次研究了个爽,找了很多的开源第三方的矿框架,包括:CocoaAsyncSocket:https://github.com/robbiehanson/CocoaAsyncSocket,Facebook出品的SocketRocket https://github.com/facebook/SocketRocket,以及今天要说道的socket.io https://github.com/socketio/socket.io-client-swift。这三个可以实现长连接的框架,都很厉害,但是因为我们的服务端是用socket.io实现的,所以我们客户端使用socket.io相关的也就最容易实现。
最新的是Socket.IO-Client-Swift,一个swift实现的Socket.IO框架,我们如果使用cocopods的话,直接
pod ‘Socket.IO-Client-Swift’
安装好之后,实现长连接就比较简单了:
1)首先在你的viewController中引入这个第三方,
@import SocketIO;
注意是@而不是#import,至于为何这样写请自行百度,这里就不赘述了。
2)引入好了框架,就开始连接
NSURL *url = [NSURL URLWithString:@"https://socketio-chat.now.sh/"]; //使用给定的url初始化一个socketIOClient,后面的config是对这个socket的一些配置,比如log设置为YES,控制台会打印连接时的日志等 SocketIOClient *socket = [[SocketIOClient alloc] initWithSocketURL:url config:@{@"log": @YES, @"forcePolling": @YES}]; //监听是否连接上服务器,正确连接走后面的回调 [socket on:@"connect" callback:^(NSArray* data, SocketAckEmitter* ack) { NSLog(@"socket connected"); [socket emit:@"kline_day" with:@[@"430009"]]; }]; //监听new message,这是socketIO官网提供的一个测试用例,大家都可以试试。如果成功连接,会收到data内容。 [socket on:@"new message" callback:^(NSArray* data, SocketAckEmitter* ack) { NSLog(@"response is %@",data); }]; [socket connect];
一般我们真正开发中,需要给服务端传递规定好的关键字,服务端才会正确的返回你想获取的数据,这个时候就要用到emmit()方法:
[socket emit:@"kline_day" with:@[@"430009"]];
上面的意思就是请求服务器430009这个股票代码的日k数据,一般我们将这个请求放在监听连接成功的方法中。
如果想停止本次长连接,也很简单,只需要用上面创建的socket对象调用disconnect()方法即可。
[self.socket disconnect];
这样一个长连接就成功了,之后就是解析获取到的数据,这个数据是每隔一定时间服务器自动推送的,我们是需要把这些数据展示在页面上即可。
相关文章推荐
- iOS使用GCDSocketManager实现长连接
- iOS使用GCDSocketManager实现长连接的方法
- iOS使用GCDSocketManager实现长连接
- IOS 使用域名进行Socket连接
- Objective-C ,ios,iphone开发基础:使用第三方库FMDB连接sqlite3 数据库,实现简单的登录
- java|android 使用SocketIO.jar连接nodejs websocket
- iOS应用中通过设置VOIP模式实现休眠状态下socket的长连接
- 使用socket.io+redis来实现基本的聊天室应用场景
- iOS 使用socket 实现rtsp +rtp 协议
- iOS应用中通过设置VOIP模式实现休眠状态下socket的长连接
- Objective-C ,ios,iphone开发基础:使用第三方库FMDB连接sqlite3 数据库,实现简单的登录
- loadunner使用socket协议来实现多客户端连接同一服务器脚本(使用到IP欺骗技术)
- 使用node.js和socket.io实现多人聊天室
- 【iOS功能实现】之:使用FMDB连接SQLite
- iOS应用中通过设置VOIP模式实现休眠状态下socket的长连接
- 使用node.js和socket.io实现多人聊天室
- Objective-C ,ios,iphone开发基础:使用第三方库FMDB连接sqlite3 数据库,实现简单的登录
- iOS应用中通过设置VOIP模式实现休眠状态下socket的长连接
- socket.io 实现简单的用户连接计数
- 使用node.js和socket.io实现多人聊天室