最近本人在項目中需要實現(xiàn)聊天技術(shù).最開始的時候本來想采用第三方SDK來進行聊天,考慮到后期的成本以及數(shù)據(jù)安全性,最終還是選擇了SignalR來實現(xiàn).SignalR也是長連接的一種.什么是長連接呢,長連接->傳輸數(shù)據(jù)->保持連接 -> 傳輸數(shù)據(jù)-> 。。。 ->關(guān)閉連接,指建立連接后不管是否使用都保持連接。例如XMPP.這也是經(jīng)常用來實現(xiàn)聊天的技術(shù).但是在實際開發(fā)中,還得要結(jié)合后臺人員的技術(shù)問題.綜合考慮我們采用了SignalR.
? 使用SignalR也非常容易.最常用的方法就是用cocoapods導(dǎo)入? platform :ios, '8.0'? ? pod 'SignalR-ObjC', '~> 2.0'.大家也可以直接上github上看一下相關(guān)的解釋.直接導(dǎo)入也可以.強烈建議用cocoaPods
如何使用呢?這是大家很關(guān)心的問題,這個地方我只講移動開發(fā)端的使用.畢竟本人是ios開發(fā)人員哈.
通過github上面的文章我們可以看見以下的代碼.下面的這段代碼就是連接SignalR.@"http://localhost/mysite/echo"這個就是SignalR連接的地址.由后臺人員提供.下面的方法是一系列的回調(diào)方法,比如開始連接,收到消息,正在連接等等.用的比較多的就是setReconnected這個方法,代表已經(jīng)連接成功.如果這個方法回調(diào)了,代表你的SignalR長連接已經(jīng)連接成功.
//Client
#import "SignalR.h"
// Connect to the service連接服務(wù)器
SRHubConnection *hubConnection = [SRHubConnection connectionWithURLString:@"http://localhost/mysite"];
// Create a proxy to the chat service
//創(chuàng)建一個代理到聊天服務(wù)
//這個地方使用的時候要注意實體的使用chat.這個chat并不是固定的,是由后臺人員給的.如果這個不對的話將會導(dǎo)致后面的回調(diào)方法不執(zhí)行
SRHubProxy *chat = [hubConnection createHubProxy:@"chat"];
//注冊方法,addMessage: ? 后臺人員一旦在后臺調(diào)用了這個方法,只要移動端注冊了這個方法就會立即執(zhí)行
[chat on:@"addMessage" perform:self selector:@selector(addMessage:)];
// Register for connection lifecycle events
[hubConnection setStarted:^{
NSLog(@"Connection Started");
[connection send:@"hello world"];
}];
[hubConnection setReceived:^(NSString *message) {
NSLog(@"Connection Recieved Data: %@",message);
}];
[hubConnection setConnectionSlow:^{
NSLog(@"Connection Slow");
}];
[hubConnection setReconnecting:^{
NSLog(@"Connection Reconnecting");
}];
//連接成功
[hubConnection setReconnected:^{
NSLog(@"Connection Reconnected");
}];
//連接關(guān)閉
[hubConnection setClosed:^{
NSLog(@"Connection Closed");
}];
[hubConnection setError:^(NSError *error) {
NSLog(@"Connection Error %@",error);
}];
// Start the connection
//開始連接
[hubConnection start];
//注冊的方法 ?
- (void)addMessage:(NSString *)message {
// Print the message when it comes in
NSLog(message);
}
SignalR的使用其實在移動開發(fā)端很簡單.主要是一個連接和注冊方法,以及主動實現(xiàn).聊天的復(fù)雜邏輯主要是在后臺實現(xiàn).大致說一下SignalR聊天如何在移動開發(fā)端實現(xiàn).后臺給接口,也就是回調(diào)方法的名字.后臺要向我們發(fā)送消息的時候就會調(diào)用某個方法,然后我們已經(jīng)在移動開發(fā)端注冊了這個方法,后臺調(diào)用的時候移動開發(fā)端會進行相應(yīng)的回調(diào),并收到后臺返回的字段既聊天信息.
SRHubProxy *chat = [hubConnection createHubProxy:@"WebRtcHub"];
//注冊接收聊天信息的方法
[self.chat1 on:@"updateMsgCallBack" perform:self selector:@selector(resicvechatMessage:andMessage:)];
//接收到單獨的聊天消息
-(void)resicvechatMessage:(NSDictionary *)User andMessage:(NSDictionary *)Message
{
//處理接收到的聊天信息
NSLog(@"接受到了聊天信息");
NSLog(@"uset=%@? 消息=%@",User,Message);
NSDictionary *mesDic=@{
@"User":User,
@"Message":Message
};
[[NSNotificationCenter defaultCenter] postNotificationName:@"sendChatMessage" object:Message];
}
那么我們?nèi)绾谓o后臺發(fā)送消息呢.SignalR也給我們提供了一個方法.
SRHubProxy *chat = [hubConnection createHubProxy:@"chat"];
//invok: withArgs:? 這個方法就是主動實現(xiàn)方法,上面我們注冊方法可以理解成被動執(zhí)行方法.sendMsg是后臺定義的方法.由后臺提供方法名.withArgs后面的參數(shù)是數(shù)組,將你需要穿的數(shù)據(jù)包成數(shù)組傳給后臺.至于數(shù)據(jù)的如何處理就需要移動開發(fā)端和后臺的配合.
[chat invoke:@"sendMsg" withArgs:@[dic1,[YLShareModel shareViewModel].roomID]];
簡而言之,SignalR的使用還是非常簡單的.一個是連接,一個是主動實現(xiàn)方法,另外一個是被動實現(xiàn)方法.掌握好這三點就夠?qū)崿F(xiàn)聊天了.有問題可以留言
承接APP,小程序,公眾號開發(fā). 性價比高.+V信:17723566468 ?有單子也可找我一起做哦