微信,QQ这类IMapp怎么做——谈谈Websocket任淏

关于我和WebSocket的缘:我从大二在计算机网络课上听老师讲过之后,第一次使用就到了毕业之后的第一份工作。直到最近换了工作,到了一家是含有IM社交聊天功能的app的时候,我觉得我现在可以谈谈我对WebSocket/Socket的一些看法了。要想做IM聊天app,就不得不理解WebSocket和Socket的原理了,听我一一道来。

目录

1.WebSocket使用场景

2.WebSocket诞生由来

3.谈谈WebSocket协议原理

4.WebSocket和Socket的区别与联系

5.iOS平台有哪些WebSocket和Socket的开源框架

6.iOS平台如何实现WebSocket协议

一.WebSocket的使用场景

1.社交聊天

2.弹幕

说到这里,大家一定里面想到了A站和B站了。确实,他们的弹幕一直是一种特色。而且弹幕对于一个视频来说,很可能弹幕才是精华。发弹幕需要实时显示,也需要和聊天一样,需要即时。

3.多玩家游戏

4.协同编辑

现在很多开源项目都是分散在世界各地的开发者一起协同开发,此时就会用到版本控制系统,比如Git,SVN去合并冲突。但是如果有一份文档,支持多人实时在线协同编辑,那么此时就会用到比如WebSocket了,它可以保证各个编辑者都在编辑同一个文档,此时不需要用到Git,SVN这些版本控制,因为在协同编辑界面就会实时看到对方编辑了什么,谁在修改哪些段落和文字。

5.股票基金实时报价

6.体育实况更新

全世界的球迷,体育爱好者特别多,当然大家在关心自己喜欢的体育活动的时候,比赛实时的赛况是他们最最关心的事情。这类新闻中最好的体验就是利用Websocket达到实时的更新!

7.视频会议/聊天

8.基于位置的应用

越来越多的开发者借用移动设备的GPS功能来实现他们基于位置的网络应用。如果你一直记录用户的位置(比如运行应用来记录运动轨迹),你可以收集到更加细致化的数据。

9.在线教育

在线教育近几年也发展迅速。优点很多,免去了场地的限制,能让名师的资源合理的分配给全国各地想要学习知识的同学手上,Websocket是个不错的选择,可以视频聊天、即时聊天以及其与别人合作一起在网上讨论问题...

10.智能家居

这也是我一毕业加入的一个伟大的物联网智能家居的公司。考虑到家里的智能设备的状态必须需要实时的展现在手机app客户端上,毫无疑问选择了Websocket。

11.总结

从上面我列举的这些场景来看,一个共同点就是,高实时性!

二.WebSocket诞生由来

1.最开始的轮询Polling阶段

2.改进版的长轮询Longpolling阶段

3.WebSocket诞生

现在急需的需求是能支持客户端和服务器端的双向通信,而且协议的头部又没有HTTP的Header那么大,于是,Websocket就诞生了!

上图就是Websocket和Polling的区别,从图中可以看到Polling里面客户端发送了好多Request,而下图,只有一个Upgrade,非常简洁高效。至于消耗方面的比较就要看下图了

上图中,我们先看蓝色的柱状图,是Polling轮询消耗的流量,

UsecaseA:1,000clientspollingeverysecond:Networkthroughputis(871x1,000)=871,000bytes=6,968,000bitspersecond(6.6Mbps)

UsecaseB:10,000clientspollingeverysecond:Networkthroughputis(871x10,000)=8,710,000bytes=69,680,000bitspersecond(66Mbps)

UsecaseC:100,000clientspollingevery1second:Networkthroughputis(871x100,000)=87,100,000bytes=696,800,000bitspersecond(665Mbps)

而Websocket的Frame是justtwobytesofoverheadinsteadof871,仅仅用2个字节就代替了轮询的871字节!

UsecaseA:1,000clientsreceive1messagepersecond:Networkthroughputis(2x1,000)=2,000bytes=16,000bitspersecond(0.015Mbps)

UsecaseB:10,000clientsreceive1messagepersecond:Networkthroughputis(2x10,000)=20,000bytes=160,000bitspersecond(0.153Mbps)

UsecaseC:100,000clientsreceive1messagepersecond:Networkthroughputis(2x100,000)=200,000bytes=1,600,000bitspersecond(1.526Mbps)

相同的每秒客户端轮询的次数,当次数高达10W/s的高频率次数的时候,Polling轮询需要消耗665Mbps,而Websocket仅仅只花费了1.526Mbps,将近435倍!!

三.谈谈WebSocket协议原理

Websocket的数据传输是frame形式传输的,比如会将一条消息分为几个frame,按照先后顺序传输出去。这样做会有几个好处:

1)大数据的传输可以分片传输,不用考虑到数据大小导致的长度标志位不足够的情况。

四.WebSocket和Socket的区别与联系

首先,Socket其实并不是一个协议。它工作在OSI模型会话层(第5层),是为了方便大家直接使用更底层协议(一般是TCP或UDP)而存在的一个抽象层。Socket是对TCP/IP协议的封装,Socket本身并不是协议,而是一个调用接口(API)。

Socket通常也称作”套接字”,用于描述IP地址和端口,是一个通信链的句柄。网络上的两个程序通过一个双向的通讯连接实现数据的交换,这个双向链路的一端称为一个Socket,一个Socket由一个IP地址和一个端口号唯一确定。应用程序通常通过”套接字”向网络发出请求或者应答网络请求。

Socket在通讯过程中,服务端监听某个端口是否有连接请求,客户端向服务端发送连接请求,服务端收到连接请求向客户端发出接收消息,这样一个连接就建立起来了。客户端和服务端也都可以相互发送消息与对方进行通讯,直到双方连接断开。

所以基于WebSocket和基于Socket都可以开发出IM社交聊天类的app

五.iOS平台有哪些WebSocket和Socket的开源框架

六.iOS平台如何实现WebSocket协议

Talkischeap。Showmethecode——LinusTorvalds

首先这是SRWebSocket定义的一些成员变量

@property(nonatomic,weak)iddelegate;/**Adispatchqueueforschedulingthedelegatecalls.Thequeuedoesn'tneedbeaserialqueue.If`nil`and`delegateOperationQueue`is`nil`,thesocketusesmainqueueforperformingalldelegatemethodcalls.*/@property(nonatomic,strong)dispatch_queue_tdelegateDispatchQueue;/**Anoperationqueueforschedulingthedelegatecalls.If`nil`and`delegateOperationQueue`is`nil`,thesocketusesmainqueueforperformingalldelegatemethodcalls.*/@property(nonatomic,strong)NSOperationQueue*delegateOperationQueue;@property(nonatomic,readonly)SRReadyStatereadyState;@property(nonatomic,readonly,retain)NSURL*url;@property(nonatomic,readonly)CFHTTPMessageRefreceivedHTTPHeaders;//Optionalarrayofcookies(NSHTTPCookieobjects)toapplytotheconnections@property(nonatomic,copy)NSArray*requestCookies;//Thisreturnsthenegotiatedprotocol.//Itwillbeniluntilafterthehandshakecompletes.@property(nonatomic,readonly,copy)NSString*protocol;下面这些是SRWebSocket的一些方法

///--------------------------------------#pragmamark-SRWebSocketDelegate///--------------------------------------@protocolSRWebSocketDelegate-(void)webSocket:(SRWebSocket*)webSocketdidReceiveMessage:(id)message;@optional-(void)webSocketDidOpen:(SRWebSocket*)webSocket;-(void)webSocket:(SRWebSocket*)webSocketdidFailWithError:(NSError*)error;-(void)webSocket:(SRWebSocket*)webSocketdidCloseWithCode:(NSInteger)codereason:(NSString*)reasonwasClean:(BOOL)wasClean;-(void)webSocket:(SRWebSocket*)webSocketdidReceivePong:(NSData*)pongPayload;//ReturnYEStoconvertmessagessentasTexttoanNSString.ReturnNOtoskipNSData->NSStringconversionforTextmessages.DefaultstoYES.-(BOOL)webSocketShouldConvertTextFrameToString:(SRWebSocket*)webSocket;@enddidReceiveMessage方法是必须实现的,用来接收消息的。

下面4个did方法分别对应着Open,Fail,Close,ReceivePong不同状态的代理方法

方法就上面这些了,我们实际来看看代码怎么写

先是初始化Websocket连接,注意此处ws://或者wss://连接有且最多只能有一个,这个是Websocket协议规定的

self.ws=[[SRWebSocketalloc]initWithURLRequest:[NSURLRequestrequestWithURL:[NSURLURLWithString:[NSStringstringWithFormat:@"%@://%@:%zd/ws",serverProto,serverIP,serverPort]]]];self.ws.delegate=delegate;[self.wsopen];

THE END
1.社交软件排行榜前十名偏玩手游盒子分享十大社交软件排行榜前十名手机应用,编辑为您推荐手机社交软件排行榜第一名到前5名到前十名的应用。找社交软件有哪些、社交软件哪个好用,上偏玩手游盒子https://m.pianwan.com/s/zj-11631
2.社交应用十大品牌排行榜社交应用十大品牌,社交应用哪个品牌好?社交应用哪个牌子好?如何选择社交应用品牌?社交应用10大品牌排行榜是由品牌网(chinapp.com)承办的社交应用行业品牌评选投票得来的社交应用品牌排行榜,由网民投票得出的最有价值的社交应用十大品牌。让你更好地选择社交应用品牌https://www.chinapp.com/paihang/sjyy
3.十大社交软件排行榜正规社交平台有哪些2024年社交软件十大品牌最新发布,社交软件排行榜前十名品牌有微信、抖音、QQ、微博、快手、哔哩哔哩、小红书、知乎、豆瓣、百度贴吧。社交软件10大品牌排行榜由品牌研究部门收集整理大数据分析、研究得出,帮助你了解社交软件哪个牌子好。https://m.maigoo.com/maigoo/1211sjmt_index.html
4.常见的社交媒体平台有哪些?它们有哪些类型?它们有哪些类型? 社交媒体平台已经成为人们日常生活中不可或缺的一部分。人们可以通过社交媒体平台与他人交流、分享信息、获取新闻和娱乐内容。不同类型的社交媒体平台满足了不同人群的需求和兴趣,为人们提供了一个开放、自由的交流空间。 社交媒体平台已经成为现代生活中不可或缺的一部分。人们通过社交媒体平台与他人https://xueyuan.yixiaoer.cn/article/19052
5.目前常见的新媒体包括哪些(主流的新媒体平台有哪些)社交类新媒体平台让人们的交流不受时间和空间的约束,已渗透到人们的日常生活之中,因为可以和用户很好的互动交流,用户粘性很强。 1、 微信平台 --微信,是一个生活方式。 截至2022年1月,微信已超过10亿人使用,是目前拥有用户最多的社交平台。微信平台包括微信公众号、微信群、微信小程序、微信小商店等。 https://www.niaogebiji.com/article-130426-1.html
6.新媒体平台有哪些?新媒体平台有哪些? 在如今互联网快速发展的世界,新媒体的平台层出不穷,目前主流的新媒体平台类型主要有视频、音频、直播、社交平台、问答平台、自媒体平台等。 什么是新媒体? 新媒体是相对于传统媒体而言的,是报刊,广播,电视等传统媒体以后发展起来的新的媒体形态,是利用数字技术,网络技术,通过互联网,无线通信网,https://www.chuangkit.com/blog/pingmiansheji336.html
7.社交电商头部平台有哪些,2020年2月社交电商TOP30榜单出炉,微三云社交电商头部平台有哪些,2020年2月社交电商TOP30榜单出炉 导读: 一、2020年2月社交电商TOP30榜单 二、微三云社交电商系统介绍 三。微三云科技介绍 ——— 一、2020年2月社交电商TOP30榜单 一、综合类 拼多多: 创立于2015年9月,2018年7月,拼多多在美国纳斯达克证券交易所正式挂牌上市。创立3年,汇聚4.185亿年度活跃https://m.11467.com/product/d7768354.htm
8.社交平台app有哪些社交平台app下载社交平台app合集社交平台app合集(共334款) 社交平台是当下十分热门的网络通讯社交软件,大家能够通过社交平台app进行文件、图片、文字进行聊天,同时还可以发表自己的动态,浏览他人的主页互相留言进行互动。小编为大家带来了社交平台app合集,感兴趣的小伙伴快来寻找自己喜欢的app吧。https://m.ali213.net/tag/sjpt.html
9.2024处理不满十四周岁未成年人个人信息的条件有哪些2、尽量远离社交平台涉及的互动类活动 现在很多社交平台,会有一些填写个人信息即可生成有趣内容并可以和朋友分享的活动,看似有趣的表面,实质上却以游戏的手段获取了大量的用户信息,遇到那种奔着个人隐私信息去的“趣味”活动,建议不要参与。 3、安装病毒防护软件 不管是计算机还是智能手机,都已经成为信息泄露的高发地带https://www.66law.cn/laws/1687158.aspx
10.最新网络创作者主要是哪类群体?当下面临哪些主要问题?《20221、全民参与的生活类社交平台:短视频中的烟火气,普通老百姓的 “精神家园”,代表平台: 图表15:抖音作品类别数量分布 (TOP10) 【解读】:抖音的作品类型是最能够反映当今的大众的流行趋势的。抖音平台的主体用户不追求用专业和高大上的创作,更多人习惯于在平台上记录与分享自己的生活。试图从各种生活记录、搞笑视https://m.thepaper.cn/baijiahao_23057190
11.社交平台有哪些社交平台哪个好社交平台排行榜社交平台的普及程度不断提高,无论是传统社交网络还是移动社交应用,都为用户提供了便捷的交流渠道。人们可以通过社交平台随时随地与朋友分享生活点滴,了解最新的动态和趋势。同时,社交平台也为用户提供了更广泛的社交圈子,使人们可以更容易地结交新朋友,扩大社交网络。本专题为大家盘点了多种社交平台,有朋友唠嗑的QQ、微信https://www.mydown.com/ku/2273.shtml
12.大学生社交软件有哪些?大学生社交平台大学生社交app下载大学生社交软件是专为在校大学生打造的社交平台,通过手机app了解校园新鲜事,分享校园趣事,寻找校园里志同道合的玩伴,组建自己的兴趣俱乐部,还可以参加各种大学生课外活动,拓展自己朋友圈,让自己的大学生活更加有意义!在这儿你可以找到自己同乡,也能在这儿人找到臭味相投的人,丰富的社区功能,让你在校的生活并不单调。让https://www.itmop.com/key/dxssjrj/
13.新零售社交电商平台有哪些京东拼购是基于京东商家,利用拼购营销工具,通过拼购价及社交玩法,刺激用户多级分享裂变,是实现商家低成本引流及用户转化的一个工具,主打“低价不低质”概念。 4、国美美店 美店是以组团购物模式为核心的生活消费类社交购物平台,经营百货、生鲜、零食、美妆、母婴、电器等商品。美店依托国美强大的供应链体系,与品牌https://m.cifnews.com/article/85833
14.主要的自媒体平台有哪些?自媒体平台的类型有哪些呢?手机软件3. 视频平台:如抖音、快手、腾讯视频等,这类平台以视频内容为主,创作者可以通过制作有趣的视频,吸引粉丝关注。 4. 直播平台:如花椒直播、一直播等,这类平台主要以实时直播为主,创作者可以通过直播的形式,与粉丝互动,提升影响力。 5. 社交平台:如微博、QQ空间等,这类平台主要以社交互动为主,创作者可以通过发布https://m.php.cn/faq/717208.html
15.国际交友软件有哪些(六大海外社交平台,哪个能引爆独立站?)国际交友软件有哪些 国际交友软件有以下几个: 1.Facebook Facebook是一个全球性的社交媒体平台,除了社交功能外,它也是一个很好的国际交友工具。 用户可以通过加入各种兴趣小组或者参与讨论来结识来自不同国家的人。 2.Tinder Tinder是一个非常流行的国际交友软件。 https://www.bb1314.com/news/60404.html