iOS基于WebSocket的聊天机制

转载 2016年05月31日 17:41:06

iOS基于WebSocket的聊天机制


WebSocket 的使得浏览器提供对 Socket 的支持成为可能,从而在浏览器和服务器之间提供了一个基于 TCP 连接的双向通道。Web 开发人员可以非常方便地使用 WebSocket 构建实时 web 应用。

1.WebSocket 机制

以下简要介绍一下 WebSocket 的原理及运行机制。

WebSocket 是 HTML5 一种新的协议。它实现了浏览器与服务器全双工通信,能更好的节省服务器资源和带宽并达到实时通讯,它建立在 TCP 之上,同 HTTP 一样通过 TCP 来传输数据,但是它和 HTTP 最大不同是:

WebSocket 是一种双向通信协议,在建立连接后,WebSocket 服务器和 Browser/Client Agent 都能主动的向对方发送或接收数据,就像 Socket 一样;

WebSocket 需要类似 TCP 的客户端和服务器端通过握手连接,连接成功后才能相互通信。

使用 WebSocket 模式客户端与服务器的交互如下图:


WebSocket 是类似 Socket 的 TCP 长连接的通讯模式,一旦 WebSocket 连接建立后,后续数据都以帧序列的形式传输。在客户端断开 WebSocket 连接或 Server 端断掉连接前,不需要客户端和服务端重新发起连接请求。在海量并发及客户端与服务器交互负载流量大的情况下,极大的节省了网络带宽资源的消耗,有明显的性能优势,且客户端发送和接受消息是在同一个持久连接上发起,实时性优势明显。

2.在iOS中WebSocket的具体实现

1>下载WebSocket的sdk,并导入工程里面

2>在聊天的控制器里导入头文件代理等

3>具体使用

//连接端口

_webSocket.delegate = nil;

[_webSocket close];

_webSocket = [[SRWebSocket alloc] initWithURLRequest:[NSURLRequest requestWithURL:[NSURL URLWithString:@"ws://www.qsjia.com:7272"]]];

_webSocket.delegate = self;

[_webSocket open];

NSLog(@"open success!");

[self webSocketDidOpen:_webSocket];

//实现代理方法

#pragma SRWebSocketDelegate

//连接成功

- (void)webSocketDidOpen:(SRWebSocket *)webSocket;

{

NSLog(@"Websocket Connected");

}

//连接失败

- (void)webSocket:(SRWebSocket *)webSocket didFailWithError:(NSError *)error;

{

NSLog(@":( Websocket Failed With Error %@", error);

_webSocket = nil;

}

//接收到新消息的处理

- (void)webSocket:(SRWebSocket *)webSocket didReceiveMessage:(id)message;

{

NSLog(@"Received \"%@\"", message);

self.str = message;

self.myMessage = [ChatViewController dictionaryWithJsonString:self.str];

self.ping = [self.myMessage objectForKey:@"type"];

if ([self.ping isEqualToString:@"say"]) {

[self addMessage];

[self.arr enumerateObjectsUsingBlock:^(PersonDetail*  _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) {

if ( [obj.myid integerValue] == [self.myMessage[@"roomid"] integerValue]) {

[self.arr exchangeObjectAtIndex:idx withObjectAtIndex:0];

}

}];

[self.tableView reloadData];

}

//[self.tableView reloadData];

}

//连接关闭

- (void)webSocket:(SRWebSocket *)webSocket didCloseWithCode:(NSInteger)code reason:(NSString *)reason wasClean:(BOOL)wasClean;

{

NSLog(@"WebSocket closed");

//self.title = @"Connection Closed! (see logs)";

_webSocket = nil;

}

//登录服务器要发送的字符串(根据具体后台设置)

//获取UserDefault

NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];

NSString *uid = [userDefault objectForKey:@"uid"];

NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"login",@"type",@"1",@"room_id",uid,@"client_name", nil];

[dic enumerateKeysAndObjectsUsingBlock:^(NSString * key, id obj, BOOL *stop) {

if ([key isEqualToString:@"client_name"]) {

[dic setValue:@([uid intValue]) forKey:@"client_name"];

}else if ([key isEqualToString:@"room_id"]){

[dic setValue:@([@"1" intValue]) forKey:@"room_id"];

}

}];

NSData *data = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:NULL];

NSString *string = [[ NSString alloc ] initWithData :data encoding : NSUTF8StringEncoding];

//NSLog(@"%@",string);

[_webSocket send:string];

//退出服务器要发送的字符串

NSMutableDictionary *dic = [NSMutableDictionary dictionaryWithObjectsAndKeys:@"loginout",@"type",nil];

NSData *data = [NSJSONSerialization dataWithJSONObject:dic options:NSJSONWritingPrettyPrinted error:NULL];

NSString *string = [[ NSString alloc ] initWithData :data encoding : NSUTF8StringEncoding];

[_webSocket send:string];

webSocket一般是配合数据库一起使用的,实现的逻辑要根据具体情况来确定的.

iOS使用webSocket的简单实现

最近做K线图相关的东西,需要和服务器进行长连接实时获取数据,因为后台使用webSocket实现的,经过一番波折最终找到了facebook开源的 SocketRocket 框架,他是用oc封装的webs...

IOS SRWebSocket的使用

首先你要确定你的SRWebSocket是从git或者通过pod安装的。 在你的工程里面导入SRWebSocket所有文件,在你需要的地方引入SRWebSocket.h文件。 接着就是我们的...

iOS websocket 及时通讯实现

2015-09-03 by 木易哥哥     开发一个类似QQ、微信的即时IM聊天功能,做到实时监控消息,需要用的技术是websocket,WebSocket protocol 是HTML5一种新的协...
  • manyxh
  • manyxh
  • 2015年09月03日 17:34
  • 18667

ios websocket

我的地址 :http://blog.csdn.net/jinglijun/article/details/9365879          这一篇我们先了解一下基本知识,这样对我们后面的学习更加有帮...

iOS 上的 WebSocket 框架 Starscream

原文:WebSockets on iOS with Starscream 作者:Aaron Douglas 译者:kmyhy 传统的网络技术 (也就是 Berkeley sockets) ...
  • kmyhy
  • kmyhy
  • 2017年01月07日 09:05
  • 5288

Delphi7高级应用开发随书源码

  • 2003年04月30日 00:00
  • 676KB
  • 下载

OC原生的输入输出流结合socket实现即时通讯

#import "ViewController.h" @interface ViewController ()NSStreamDelegate,UITextFieldDelega...

SocketRocket:iOS WebSocket客户端开源框架

WebSocket: WebSocket通信协议实现的是基于浏览器的原生socket,维基百科上解释:“WebSocket是HTML5开始提供的一种在单个 TCP 连接上进行全双工通讯的协议。WebS...
  • zmp1123
  • zmp1123
  • 2015年03月02日 10:26
  • 3058

iOS Client 与WebSocket 通信(一)

这一篇我们先了解一下基本知识,这样对我们后面的学习更加有帮助  。           Socket,WebSocket,Http,Tcp等这些我们已经听的耳朵有茧了,但是用得时候还是复习一下吧。  ...

iOS WebSocket详解

原文链接:http://blog.163.com/soda_water05/blog/static/21283223520141190037863/ 作为下一代的 Web 标准,HTML5 拥有...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:iOS基于WebSocket的聊天机制
举报原因:
原因补充:

(最多只允许输入30个字)