MQTT实现长连接,IM最简单实例

1,引入MqttSDK.

2,在Appdelegare中引入头
#import "MQTTSession.h"
 #import "MQTTViewController.h"

//定义主题
#define kTopic @"lichanghong"
//服务器ip
#define kIP @"192.168.2.204"

@interface SWAppDelegate : UIResponder <UIApplicationDelegate>

@property (strong, nonatomic) UIWindow *window;

@property (readonly, strong, nonatomic) NSManagedObjectContext *managedObjectContext;
@property (readonly, strong, nonatomic) NSManagedObjectModel *managedObjectModel;
@property (readonly, strong, nonatomic) NSPersistentStoreCoordinator *persistentStoreCoordinator;

@property (readonly, strong, nonatomic) NSString *currentUser;

- (void)saveContext;

- (NSURL *)applicationDocumentsDirectory;

- (void)login;

- (void)connectToServer;

- (void)sendMessage:(NSString *)message toUser:(NSString *)toUser;

+ (SWAppDelegate *)shareInstance;

@end

//定义一属性

@interface SWAppDelegate ()

@property (nonatomic, strong) MQTTSession *session;

@end

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
  MQTTViewController *mqttVC = [[MQTTViewController alloc]init];
  mqttVC.view.backgroundColor = [UIColor whiteColor];
  self.window.rootViewController = mqttVC;
   return YES;
}

所有实现代码都在MQTTViewController里

#import "MQTTSession.h"
#import "Message+Parser.h"

@implementation MQTTViewController
{
  MQTTSession *session;
}

- (void)viewDidLoad {
    [super viewDidLoad];
   
//  //连接
  session = [[MQTTSession alloc] initWithClientId:@"12345"];
  [session setDelegate:self];
  [session connectToHost:@"192.168.2.204" port:1883];
//
//   [session publishDataAtLeastOnce:[@"publish data..." dataUsingEncoding:NSUTF8StringEncoding] onTopic:@"lichanghong"];
    // Do any additional setup after loading the view.
}

- (void)didReceiveMemoryWarning {
    [super didReceiveMemoryWarning];
    // Dispose of any resources that can be recreated.
}

#pragma mark - MQtt Callback methods

- (void)session:(MQTTSession*)sender handleEvent:(MQTTSessionEvent)eventCode {
  switch (eventCode) {
    case MQTTSessionEventConnected:
      [session subscribeTopic:@"lichanghong"];
      NSLog(@"connected");

break;
    case MQTTSessionEventConnectionRefused:
      NSLog(@"connection refused");
      break;
    case MQTTSessionEventConnectionClosed:
      NSLog(@"connection closed");
      break;
    case MQTTSessionEventConnectionError:
      NSLog(@"connection error");
      NSLog(@"reconnecting...");
      // Forcing reconnection
      [session connectToHost:kIP port:1883];
      break;
    case MQTTSessionEventProtocolError:
      NSLog(@"protocol error");
      break;
  }
}

- (void)session:(MQTTSession*)sender  newMessage:(NSData*)data  onTopic:(NSString*)topic {
  NSLog(@"new message, %lu bytes, topic=%@", (unsigned long)[data length], topic);
  NSString *payloadString = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
  NSLog(@"data: %@ %@", payloadString, data);
  [Message parseMessage:data];
 
}

时间: 2024-12-06 12:03:13

MQTT实现长连接,IM最简单实例的相关文章

android 连接网络的简单实例

1.android有两种连接网络的类HttpURLConnect和HttpClient,但是HttpClient已逐渐被HttpURLConnect类代替所以就不提及. 2.实例 String address = "http://www.baidu.com"; URL url = new URL(address);//将String类型转化成URL类型 HttpURLConnect con = (HttpURLConnect)url.openConnection();//创建一个指向要

java连接oracle数据库简单实例

package cn.com.login.dao; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; public class LoginDao {     public String getUserName(String userCode){      Connection con = null;    

互联网推送服务原理:长连接+心跳机制(MQTT协议)

互联网推送消息的方式很常见,特别是移动互联网上,手机每天都能收到好多推送消息,经过研究发现,这些推送服务的原理都是维护一个长连接(要不不可能达到实时效果),但普通的socket连接对服务器的消耗太大了,所以才会出现像MQTT这种轻量级低消耗的协议来维护长连接,那么要如何维护长连接呢: 在写之前,我们首先了解一下为什么Android维护长连接需要心跳机制,首先我们知道,维护任何一个长连接都需要心跳机制,客户端发送一个心跳给 服务器,服务器给客户端一个心跳应答,这样就形成客户端服务器的一次完整的握手

移动互联网消息推送原理:长连接+心跳机制(MQTT协议)

互联网推送消息的方式很常见,特别是移动互联网上,手机每天都能收到好多推送消息,经过研究发现,这些推送服务的原理都是维护一个长连接(要不不可能达到实时效果),但普通的socket连接对服务器的消耗太大了,所以才会出现像MQTT这种轻量级低消耗的协议来维护长连接,那么要如何维护长连接呢: 在写之前,我们首先了解一下为什么Android维护长连接需要心跳机制,首先我们知道,维护任何一个长连接都需要心跳机制,客户端发送一个心跳给 服务器,服务器给客户端一个心跳应答,这样就形成客户端服务器的一次完整的握手

基于长连接简单聊天

一.由来 最近,公司需要一个即时聊天功能.为此,曾尝试SignalR,Tencent Mars,重点研究了下mars项目,该项目支持Android,iOS端通信,并能对网络进行优化处理,是微信内部运行架构.服务端是基于Netty框架通信,数据通过protobuf封装,并自定义了一套通信协议.客户端通信,通过封装好的类库进行调用.因此,对于项目较急的,上线快速,此方案研究耗时较长,不满足现状.因此,在此先试用简单长连接,并设置好接口,以备后续直接切换成成熟框架. 作为研究学习记录,对简单长连接做一

转 互联网推送服务原理:长连接+心跳机制(MQTT协议)

http://blog.csdn.net/zhangzeyuaaa/article/details/39028369 目录(?)[-] 无线移动网络的特点 android系统的推送和IOS的推送有什么区别 推送的实现方式 互联网推送消息的方式很常见,特别是移动互联网上,手机每天都能收到好多推送消息,经过研究发现,这些推送服务的原理都是维护一个长连接(要不不可能达到实时效果),但普通的socket连接对服务器的消耗太大了,所以才会出现像MQTT这种轻量级低消耗的协议来维护长连接,那么要如何维护长连

基于ASP.NET的comet简单实现 http长连接,IAsyncResult

http://www.cnblogs.com/hanxianlong/archive/2010/04/27/1722018.html 我潜水很多年,今天忽然出现.很久没写过博客了,不是因为不想写,而是因为没有什么感想,不知从何写起. 前天看到一篇博文<一步一步打造自己的WEBIM>,觉得COMET这个概念很有意思,但博主使用了自己的一套较为复杂的框架,看起来颇为费劲,故而我想通过简单的“jQuery+两个类”来实现一个简单的comet模型,并附上源码,请大家拍砖. 效果图如下: 一.概念 借用

TCP协议的长连接,短连接以及心跳包实例

TCP连接简介 当网络通信时采用TCP协议时,在真正的读写操作之前,server与client之间必须建立一个连接, 当读写操作完成后,双方不再需要这个连接时它们可以释放这个连接, 连接的建立是需要三次握手的,而释放则需要4次握手, 所以说每个连接的建立都是需要资源消耗和时间消耗的 经典的三次握手示意图: 经典的四次握手关闭图: 一.长连接与短连接 长连接: 指在一个TCP连接上可以连续发送多个数据包, 在TCP连接保持期间,如果没有数据包发送,需要双方发检测包以维持此连接; 一般需要自己做在线

【转载】(一)基于阿里云的MQTT远程控制(Android 连接MQTT服务器,ESP8266连接MQTT服务器实现远程通信控制----简单的连接通信)

如果不了解MQTT的可以看这篇文章  http://www.cnblogs.com/yangfengwu/p/7764667.html http://www.cnblogs.com/yangfengwu/p/8026014.html 关于钱的问题,其实自己是花钱买的云服务,虽然自己现在能支付的起,但是呢为了尽量减少支出,自已还有好多好多文章要写,好多好多元器件要买,所以哈会在自己的淘宝上卖源码2元价格,一元捐出,一元自己留着当亲们支付云服务的费用了 如果看不懂也没关系,跟着做就可以了,做完以后您