赞
踩
Socket:
1>Socket又称"套接字”
2>网络上的两个程序通过一个双向的通信连接实现数据的交换,这个连接的一端称为一个socket。
UDP(用户数据报协议)
1.HTTP 底层就是通过socket建立连接通信管道,实现数据传输
2.HTTP是一个TCP的传输协议(方式),它是一个可靠,安全的协议
传输格式:假设:这是假设,实际http的格式不是这样的。
http1.1,content-type:multipart/form-data,content-length:188,body:username=zhangsan&password=123456
可扩展消息处理现场协议)是基于可扩展标记语言(XML)的协议,它用于即时消息(IM)以及在线现场探测。这个协议可能最终允许因特网用户向因特网上的其他任何人发送即时消息
传输格式:
<from>zhangsan<from>
<to>lisi<to>
<body>一起吃晚上</body>
{
“from”:”zhangsan”,
”to”:”lisi”,
”body”:”中午一起吃饭”
}
即时通讯 :即时通讯,又称实时通讯
/* *registerSDKWithAppKey: 区别app的标识,开发者注册及管理后台 apnsCertName: iOS中推送证书名称。制作与上传推送证书 */ //环信的初始化 // [[EaseMob sharedInstance] registerSDKWithAppKey:@"vgios#hxchat" apnsCertName:@””]; //环信的初始化 并隐藏日志输出 [[EaseMob sharedInstance] registerSDKWithAppKey:@"vgios#hxchat" apnsCertName:@"" otherConfig:@{kSDKConfigEnableConsoleLogger:@(NO)}];
环信登录:
注册:
[[EaseMob sharedInstance].chatManager asyncRegisterNewAccount:”vgios1” password:”123456” withCompletion:^(NSString *username, NSString *password, EMError *error) { NSLog(@"error:%@ username:%@ pwd:%@",error,username,password); } onQueue:nil];
自动登录:
/*! @method @brief 将要发起自动重连操作时发送该回调 @discussion @result */ - (void)willAutoReconnect; /*! @method @brief 自动重连操作完成后的回调(成功的话,error为nil,失败的话,查看error的错误信息) @discussion @result */ - (void)didAutoReconnectFinishedWithError:(NSError *)error;
EMChatManagerBuddyDelegate:
环信消息发送的流程
1.先把记录保存到Conversation表
2.接着发送网络请求,API如下
[[EaseMob sharedInstance].chatManager asyncSendMessage:message progress:self prepare:^(EMMessage *message, EMError *error) { KSLog(@"prepare %@",message.messageBodies); } onQueue:nil completion:^(EMMessage *message, EMError *error) { KSLog(@"完成 %@",message.messageBodies); } onQueue:nil];
显示聊天消息:
// 1.获取所有历史会话 NSArray *conversations = [[EaseMob sharedInstance].chatManager conversations]; // 2.如果内存中,没有会话,从数据库中加载 if (conversations.count == 0) { conversations = [[EaseMob sharedInstance].chatManager loadAllConversationsFromDatabaseWithAppend2Chat:YES]; }
设置消息为已读:
// 设置当前会话所有消息都为已读 [self.conversation markAllMessagesAsRead:YES]; // 设置某条消息为已读 [self.conversation markMessageWithId:<#(NSString *)#> asRead:<#(BOOL)#>]
准备工作:
// 开始录音 [[EMCDDeviceManager sharedInstance] asyncStartRecordingWithFileName:fileName completion:^(NSError *error){ if (error) { KSLog( @"failure to start recording"); } }]; // 结束录音 [[EMCDDeviceManager sharedInstance] asyncStopRecordingWithCompletion:^(NSString *recordPath, NSInteger aDuration, NSError *error) { KSLog(@"%@",recordPath); }];
发送录音:
// 语音对象 EMChatVoice *voice = [[EMChatVoice alloc] initWithFile:filePath displayName:@"audio"]; // 消息体 EMVoiceMessageBody *body = [[EMVoiceMessageBody alloc] initWithChatObject:voice]; EMMessage *message = [[EMMessage alloc] initWithReceiver:self.buddy.username bodies:@[body]]; message.messageType = eMessageTypeChat;// 私聊 // 不加密 message.requireEncryption = NO;
播放录音:
[[EMCDDeviceManager sharedInstance] asyncPlayingWithPath:filePath completion:^(NSError *error) { NSLog(@"播放完成%@",error); }];
[[EaseMob sharedInstance].chatManager asyncLogoffWithUnbindDeviceToken:YES completion:^(NSDictionary *info, EMError *error) { if (!error) {//退出成功 }else{//退出失败; } } onQueue:nil];
是否使用过XMPP,XMPP的实现原理:
转载出处:https://blog.csdn.net/qq_35247219/article/details/52070700
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。