需要用到webSocket,所以搜集了一下使用方法,

git下载地址:square/SocketRocket

gitHUB 上没有看懂,就要 cocoaPod 导入了 socketRocket

导入这个包然后添加所需要的框架

导入头文件

  1. #import "SRWebSocket.h"

代码的实现

  1. #import <UIKit/UIKit.h>
  2. #import "SocketRocket.h"
  3.  
  4. @interface ViewController : UIViewController<SRWebSocketDelegate>
  5.  
  6. @property (nonatomic,strong)SRWebSocket *webSocket;
  7.  
  8. @end
  1. #import "ViewController.h"
  2.  
  3. @interface ViewController ()
  4. @property (weak, nonatomic) IBOutlet UILabel *showTxt;
  5.  
  6. @end
  7.  
  8. @implementation ViewController
  9.  
  10. - (void)viewWillAppear:(BOOL)animated{
  11. [self Reconnect];
  12. }
  13.  
  14. - (void)viewDidDisappear:(BOOL)animated{
  15. // Close WebSocket
  16. self.webSocket.delegate = nil;
  17. [self.webSocket close];
  18. self.webSocket = nil;
  19. }
  20.  
  21. - (void)viewDidLoad {
  22. [super viewDidLoad];
  23.  
  24. }
  25. //初始化
  26. - (void)Reconnect{
  27. self.webSocket.delegate = nil;
  28. [self.webSocket close];
  29.  
  30. self.webSocket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"ws://echo.websocket.org"]]];
  31. self.webSocket.delegate = self;
  32.  
  33. self.title = @"Opening Connection...";
  34.  
  35. [self.webSocket open];
  36. }
  37. //成功连接
  38. - (void)webSocketDidOpen:(SRWebSocket *)webSocket {
  39. NSLog(@"Websocket Connected");
  40. self.title = @"Connected!";
  41. }
  42. //连接失败,打印错误信息
  43. - (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error {
  44. NSLog(@":( Websocket Failed With Error %@", error);
  45. self.title = @"Connection Failed! (see logs)";
  46. self.webSocket = nil;
  47. }
  48. //接收服务器发送信息
  49. - (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message {
  50. NSLog(@"Received \"%@\"", message);
  51. self.showTxt.text = message;
  52. }
  53. // 长连接关闭
  54. - (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean {
  55. NSLog(@"WebSocket closed");
  56. self.title = @"Connection Closed! (see logs)";
  57. self.webSocket = nil;
  58. }
  59. //该函数是接收服务器发送的pong消息
  60. - (void)webSocket:(SRWebSocket *)webSocket didReceivePong:(NSData *)pongPayload {
  61. NSString *reply = [[NSString alloc] initWithData:pongPayload encoding:NSUTF8StringEncoding];
  62. NSLog(@"%@",reply);
  63. }
  64.  
  65. - (IBAction)sendAction:(id)sender {
  66.  
  67. [self.view endEditing:YES];
  68. // WebSocket
  69. if (self.webSocket) {
  70. [self.webSocket send:@"test success"];
  71. }
  72. }

有关这个方法需要说一下

  1. -(void)webSocket:(SRWebSocket *)webSocket didReceivePong:(NSData *)pongPayload{
  2. socketPong = socketPong + ;
  3. }

其中最后一个是接受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 简单的使用的更多相关文章

  1. 基于Facebook开源框架SocketRocket的即时通讯

    SocketRocket 介绍: SocketRock 是 Facebook 开源的框架,基于 WebSocket 客户端类库,适用于 iOS.Mac OS.tv OS.GitHub 传送门:http ...

  2. Android中Universal Image Loader开源框架的简单使用

    UIL (Universal Image Loader)aims to provide a powerful, flexible and highly customizable instrument ...

  3. 开源框架】Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发

    [原][开源框架]Android之史上最全最简单最有用的第三方开源库收集整理,有助于快速开发,欢迎各位... 时间 2015-01-05 10:08:18 我是程序猿,我为自己代言 原文  http: ...

  4. Android中android-async-http开源网络框架的简单使用

    android-async-http开源网络框架是专门针对Android在Apache的基础上构建的异步且基于回调的http client.所有的请求全在UI线程之外发生,而callback发生在创建 ...

  5. IOS-常用第三方开源框架介绍

    iOS开发-常用第三方开源框架介绍(你了解的ios只是冰山一角) 时间:2015-05-06 16:43:34      阅读:533      评论:0      收藏:0      [点我收藏+] ...

  6. iOS开发-常用第三方开源框架介绍

    iOS开发-常用第三方开源框架介绍 图像: 1.图片浏览控件MWPhotoBrowser        实现了一个照片浏览器类似 iOS 自带的相册应用,可显示来自手机的图片或者是网络图片,可自动从网 ...

  7. iOS超全开源框架、项目和学习资料汇总(5)AppleWatch、经典博客、三方开源总结篇

    完整项目 v2ex – v2ex 的客户端,新闻.论坛.apps-ios-wikipedia – apps-ios-wikipedia 客户端.jetstream-ios – 一款 Uber 的 MV ...

  8. 【转】iOS超全开源框架、项目和学习资料汇总

    iOS超全开源框架.项目和学习资料汇总(1)UI篇iOS超全开源框架.项目和学习资料汇总(2)动画篇iOS超全开源框架.项目和学习资料汇总(3)网络和Model篇iOS超全开源框架.项目和学习资料汇总 ...

  9. GitHub 上排名前 100 的 Android 开源库进行简单的介绍

    若有任何疑问可通过邮件或微博联系我 项目名称 项目简介 1. react-native 这个是 Facebook 在 React.js Conf 2015 大会上推出的基于 JavaScript 的开 ...

随机推荐

  1. ML 徒手系列 拉格朗日乘子法

    拉格朗日乘子法是解决极值问题的方法. 本方法是计算多元函数在约束条件下的极值问题的方法. 1.多元函数与约束问题 如下图所示,f(x,y)为多元函数,g(x,y)=c为约束条件.目的是计算在约束条件下 ...

  2. MSSQL手札一 MSSQL的游标

    和oracle的不同,MSSQL中没有隐式游标的说法,也没有%type和%rowtype这样根据数据库字段实时更新变量含义的关键字,MSSQL的游标类似于oracle的显示游标,需要自己去手动关闭, ...

  3. VS2010编译器下针对C#和C++的opencv的配置方法

    我们大家都知道opencv是针对C.C++编写的,没有独立的编译调试工具.所以今天就捣鼓了一下在xp vs2010下配置C++和C#环境下的opencv.请大家一步一步的按步骤操作.本人亲自鉴定可行. ...

  4. 100个直接可以拿来用的JavaScript实用功能代码片段(转载)

    把平时网站上常用的一些实用功能代码片段通通收集起来,方面网友们学习使用,利用好的话可以加快网友们的开发速度,提高工作效率. 目录如下: 1.原生JavaScript实现字符串长度截取2.原生JavaS ...

  5. java 对excel操作导入excel数据到数据库

    加入jar包jxl.jar ===================services层掉用工具类==================================== // 导入 public Lis ...

  6. 创建可执行的JAR包

    创建可执行的JAR文件包,需要使用带cvfm参数的jar命令,命令如下:JAR cvfm test.jar manifest.mf testtest.jar和manifest.mf为两个文件,分别对应 ...

  7. 利用 Heritrix 构建特定站点爬虫

    http://www.ibm.com/developerworks/cn/opensource/os-cn-heritrix/

  8. BeanFactory和ApplicationContext的作用和区别

    BeanFactory和ApplicationContext的作用和区别 作用: 1. BeanFactory负责读取bean配置文档,管理bean的加载,实例化,维护bean之间的依赖关系,负责be ...

  9. 负载均衡SESSION同步总结

    1.redis/分布式文件存储系统/数据库 存储session,解决负载均衡集群中session不一致问题 http://www.cnblogs.com/painsOnline/p/5194851.h ...

  10. windows win7 win10 多系统启动菜单 多系统引导设置

    win键+R 输入msconfig 根据显示的程序设置(除非你看不懂文字)