webSocket开源框架:SocketRocket 简单的使用
需要用到webSocket,所以搜集了一下使用方法,
gitHUB 上没有看懂,就要 cocoaPod 导入了 socketRocket
导入这个包然后添加所需要的框架
导入头文件
- #import "SRWebSocket.h"
代码的实现
- #import <UIKit/UIKit.h>
- #import "SocketRocket.h"
- @interface ViewController : UIViewController<SRWebSocketDelegate>
- @property (nonatomic,strong)SRWebSocket *webSocket;
- @end
- #import "ViewController.h"
- @interface ViewController ()
- @property (weak, nonatomic) IBOutlet UILabel *showTxt;
- @end
- @implementation ViewController
- - (void)viewWillAppear:(BOOL)animated{
- [self Reconnect];
- }
- - (void)viewDidDisappear:(BOOL)animated{
- // Close WebSocket
- self.webSocket.delegate = nil;
- [self.webSocket close];
- self.webSocket = nil;
- }
- - (void)viewDidLoad {
- [super viewDidLoad];
- }
- //初始化
- - (void)Reconnect{
- self.webSocket.delegate = nil;
- [self.webSocket close];
- self.webSocket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"ws://echo.websocket.org"]]];
- self.webSocket.delegate = self;
- self.title = @"Opening Connection...";
- [self.webSocket open];
- }
- //成功连接
- - (void)webSocketDidOpen:(SRWebSocket *)webSocket {
- NSLog(@"Websocket Connected");
- self.title = @"Connected!";
- }
- //连接失败,打印错误信息
- - (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error {
- NSLog(@":( Websocket Failed With Error %@", error);
- self.title = @"Connection Failed! (see logs)";
- self.webSocket = nil;
- }
- //接收服务器发送信息
- - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message {
- NSLog(@"Received \"%@\"", message);
- self.showTxt.text = message;
- }
- // 长连接关闭
- - (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean {
- NSLog(@"WebSocket closed");
- self.title = @"Connection Closed! (see logs)";
- self.webSocket = nil;
- }
- //该函数是接收服务器发送的pong消息
- - (void)webSocket:(SRWebSocket *)webSocket didReceivePong:(NSData *)pongPayload {
- NSString *reply = [[NSString alloc] initWithData:pongPayload encoding:NSUTF8StringEncoding];
- NSLog(@"%@",reply);
- }
- - (IBAction)sendAction:(id)sender {
- [self.view endEditing:YES];
- // WebSocket
- if (self.webSocket) {
- [self.webSocket send:@"test success"];
- }
- }
有关这个方法需要说一下
- -(void)webSocket:(SRWebSocket *)webSocket didReceivePong:(NSData *)pongPayload{
- socketPong = socketPong + ;
- }
其中最后一个是接受pong消息的,在这里就要提一下心跳包,一般情况下建立长连接都会建立一个心跳包,用于每隔一段时间通知一次服务端,客户端还是在线,这个心跳包其实就是一个ping消息,我的理解就是建立一个定时器,每隔十秒或者十五秒向服务端发送一个ping消息,这个消息可是是空的,例如
NSData * data = [[NSData alloc]init];
[_webSocket sendPing:data];
发送过去消息以后,服务器会返回一个pong消息,这个消息是解读不了的,但是每次返回时就会调用-(void)webSocket:(SRWebSocket *)webSocket didReceivePong:(NSData *)pongPayload这个函数,如果要用到话,可以像我做的那样,直接在该函数里面统计一下收到的次数,跟发送的次数比较,如果每次发送之前,自己发送的ping消息的个数,跟收到pong消息的个数相同,那就代表一直在连接状态,但是服务器发送pong消息时候是自动发送的,服务器是看不到客户端发送的ping消息的,同理,服务端也一样,只要服务端建立有心跳连接,那么服务端也是一直在发送ping消息,客户端一直在回复pong消息,这两个消息是处理不了的,没办法解读这个歌消息体里面的内容。还有一点就是在发送ping消息的时候,如果非要想在里面加入一些参数,这个参数不能太大,太大的话,会提示发送失败
//server的例子参考
//http://haoningabc.iteye.com/blog/2124605
webSocket开源框架:SocketRocket 简单的使用的更多相关文章
- 基于Facebook开源框架SocketRocket的即时通讯
SocketRocket 介绍: SocketRock 是 Facebook 开源的框架,基于 WebSocket 客户端类库,适用于 iOS.Mac OS.tv OS.GitHub 传送门:http ...
- Android中Universal Image Loader开源框架的简单使用
UIL (Universal Image Loader)aims to provide a powerful, flexible and highly customizable instrument ...
- 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发
[原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文 http: ...
- Android中android-async-http开源网络框架的简单使用
android-async-http开源网络框架是专门针对Android在Apache的基础上构建的异步且基于回调的http client.所有的请求全在UI线程之外发生,而callback发生在创建 ...
- IOS-常用第三方开源框架介绍
iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 时间:2015-05-06 16:43:34 阅读:533 评论:0 收藏:0 [点我收藏+] ...
- iOS开发-常用第三方开源框架介绍
iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser 实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网 ...
- iOS超全开源框架、项目和学习资料汇总(5)AppleWatch、经典博客、三方开源总结篇
完整项目 v2ex – v2ex 的客户端,新闻.论坛.apps-ios-wikipedia – apps-ios-wikipedia 客户端.jetstream-ios – 一款 Uber 的 MV ...
- 【转】iOS超全开源框架、项目和学习资料汇总
iOS超全开源框架.项目和学习资料汇总(1)UI篇iOS超全开源框架.项目和学习资料汇总(2)动画篇iOS超全开源框架.项目和学习资料汇总(3)网络和Model篇iOS超全开源框架.项目和学习资料汇总 ...
- GitHub 上排名前 100 的 Android 开源库进行简单的介绍
若有任何疑问可通过邮件或微博联系我 项目名称 项目简介 1. react-native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开 ...
随机推荐
- ML 徒手系列 拉格朗日乘子法
拉格朗日乘子法是解决极值问题的方法. 本方法是计算多元函数在约束条件下的极值问题的方法. 1.多元函数与约束问题 如下图所示,f(x,y)为多元函数,g(x,y)=c为约束条件.目的是计算在约束条件下 ...
- MSSQL手札一 MSSQL的游标
和oracle的不同,MSSQL中没有隐式游标的说法,也没有%type和%rowtype这样根据数据库字段实时更新变量含义的关键字,MSSQL的游标类似于oracle的显示游标,需要自己去手动关闭, ...
- VS2010编译器下针对C#和C++的opencv的配置方法
我们大家都知道opencv是针对C.C++编写的,没有独立的编译调试工具.所以今天就捣鼓了一下在xp vs2010下配置C++和C#环境下的opencv.请大家一步一步的按步骤操作.本人亲自鉴定可行. ...
- 100个直接可以拿来用的JavaScript实用功能代码片段(转载)
把平时网站上常用的一些实用功能代码片段通通收集起来,方面网友们学习使用,利用好的话可以加快网友们的开发速度,提高工作效率. 目录如下: 1.原生JavaScript实现字符串长度截取2.原生JavaS ...
- java 对excel操作导入excel数据到数据库
加入jar包jxl.jar ===================services层掉用工具类==================================== // 导入 public Lis ...
- 创建可执行的JAR包
创建可执行的JAR文件包,需要使用带cvfm参数的jar命令,命令如下:JAR cvfm test.jar manifest.mf testtest.jar和manifest.mf为两个文件,分别对应 ...
- 利用 Heritrix 构建特定站点爬虫
http://www.ibm.com/developerworks/cn/opensource/os-cn-heritrix/
- BeanFactory和ApplicationContext的作用和区别
BeanFactory和ApplicationContext的作用和区别 作用: 1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责be ...
- 负载均衡SESSION同步总结
1.redis/分布式文件存储系统/数据库 存储session,解决负载均衡集群中session不一致问题 http://www.cnblogs.com/painsOnline/p/5194851.h ...
- windows win7 win10 多系统启动菜单 多系统引导设置
win键+R 输入msconfig 根据显示的程序设置(除非你看不懂文字)