首先iOS与mac端用的框架是:https://github.com/ckrey/MQTT-Client-Framework
使用CocoaPods导入
pod ‘MQTTClient/Websocket‘ , ‘~> 0.6.9‘
然后服务端用的是Apache Apollo
http://activemq.apache.org/apollo/index.html
然后还需要一个JDK,这里面需要一个关于JAVA_HOME的配置。当时稍微百度了一下。
首先是服务端的配置,安装好之后直接run,服务端就起来了,我们可以看到有一系列的ip地址与端口号。
我们用与MQTT协议与服务器交互的是用TCP链接的ip与端口。
客户端上我们首先打开pod创建的工作空间
需要进行MQTT通讯的类的头文件导入
#import "MQTTClient.h"
同时使该类遵循协议
<MQTTSessionDelegate>
需要进行MQTT的实现文件中
//创建一个传输类型的实例
MQTTCFSocketTransport *transport = [[MQTTCFSocketTransport alloc] init];
transport.host = @"localhost";//设置传输的主机,这里我是用的是本地服务器,当然也可以使用远程的ip地址。
transport.port = 61613;//传输主机的监听端口
//创建一个任务
MQTTSession *session = [[MQTTSession alloc] init];
session.transport = transport;//设置任务的传输类型
session.delegate = self;//设置任务的代理为当前类
session.userName = @"admin";//设置任务连接使用的用户名
session.password = @"password";//设置任务连接使用的密码
//连接
[session connectWithConnectHandler:^(NSError *error) {
//以下部分是连接完成后执行的block
if (!error){
//以下部分是订阅一个话题
[session subscribeToTopic:@"topic" atLevel:2 subscribeHandler:^(NSError *error, NSArray<NSNumber *> *gQoss){
if (error) {
NSLog(@"Subscription failed %@", error.localizedDescription);
} else {
NSLog(@"Subscription sucessfull! Granted Qos: %@", gQoss);
}
}];
}else{
NSLog(@"error:%@",error);
}
}];
//设置任务代理并连接成功之后,收到订阅的话题信息会执行以下
- (void)newMessage:(MQTTSession *)session
data:(NSData *)data
onTopic:(NSString *)topic
qos:(MQTTQosLevel)qos
retained:(BOOL)retained
mid:(unsigned int)mid{
NSString *dataStr = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
NSLog(@"数据:%@",dataStr);
NSLog(@"话题:%@",topic);
}
//若要发送消息
NSString *str = @"Hello";
NSData *data = [str dataUsingEncoding:NSUTF8StringEncoding];
if ([session publishAndWaitData:data
onTopic:@"topic"
retain:NO
qos:MQTTQosLevelAtLeastOnce]){
//这部分是如果发送消息成功了,可以在这里写发送成功之后的操作
}
然后我的测试是mac一个小窗口,一个iOS的模拟机,都可以成功发送或者收到订阅的信息。