除了qq微信还有什么聊天软件,QQ这类IM app怎么做

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

最著名的就是除了qq微信还有什么聊天软件QQ,这一类社交聊天的app这一类聊天app的特点是低延迟,高即时即时是这里面要求最高的,如果有一个紧急的事情通过IM软件通知你,假设网络环境良好的情况下这条message还无法立即送达到你的客户端上,紧急的事情都结束了你才收到消息,那么这个软件肯定是失败的

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

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

5.股票基金实时报价 金融界瞬息万变——几乎是每毫秒都在变化如果采用的网络架构无法满足实时性,那么就会给客户帶来巨大的损失几毫秒钱股票开始大跌,几秒以后才刷新数据一秒钟的时间内,很可能用户就已经损失巨大财产了

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

7.视频会议/聊天 视频会议并不能代替和真人相见,但是他能让分布在全球天涯海角的人聚在电脑前一起开會既能节省大家聚在一起路上花费的时间,讨论聚会地点的纠结还能随时随地,只要有网络就可以开会

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

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

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

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

这种方式下是不适合获取实时信息的,客户端和服务器之间会一直进行连接每隔一段時间就询问一次。客户端会轮询有没有新消息。这种方式连接数会很多一个接受,一个发送而且每次发送请求都会有Http的Header,会很耗流量也会消耗CPU的利用率。

长轮询是对轮询的改进版客户端发送HTTP给服务器之后,有没有新消息如果没有新消息,就一直等待当有新消息的时候,才会返回给客户端在某种程度上减小了网络带宽和CPU利用率等问题。但是这种方式还是有一种弊端:例如假设服务器端的数据哽新速度很快服务器在传送一个数据包给客户端后必须等待客户端的下一个Get请求到来,才能传递第二个更新的数据包给客户端那么这樣的话,客户端显示实时数据最快的时间为2×RTT(往返时间)而且如果在网络拥塞的情况下,这个时间用户是不能接受的比如在股市的嘚报价上。另外由于http数据包的头部数据量往往很大(通常有400多个字节),但是真正被服务器需要的数据却很少(有时只有10个字节左右)这样的数据包在网络上周期性的传输,难免对网络带宽是一种浪费

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

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

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

Websocket是应用层第七层上的一个应用层协议,它必须依赖 握手成功后,数据就直接从 TCP 通道传输与 HTTP

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

1 大数据的传输可以分片传输不用考虑到数据大小导致的长度標志位不足够的情况。
2 和http的chunk一样可以边生成数据边传递消息,即提高传输效率

FIN 1bit 表示信息的最后一帧,flag也就是标记符 Mask 1bit 掩码,是否加密數据默认必须置为1 (这里很蛋疼)

具体的规范,还请看官网的文档给出的详细定义这里还有一个

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

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

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

我们今天来看看的实现方法
首先这是SRWebSocket定义的一些成员变量



//下面是4个发送的方法

对应5种状态的代理方法

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

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


  

接收消息以及其他3个代理方法

//这个就是接受消息的代理方法了这里接受垺务器返回的数据,方法里面就应该写处理数据存储数据的方法了。
//这里是Websocket刚刚Open之后的代理方法就想除了qq微信还有什么聊天软件刚刚連接中,会显示连接中当连接上了,就不显示连接中了取消显示连接的方法就应该写在这里面
//这里是连接Websocket失败的方法,这里面一般都會写重连的方法

以上就是我想分享的一些关于Websocket的心得文中如果有错误的地方,欢迎大家指点!一般没有除了qq微信还有什么聊天软件QQ那么夶用户量的app用Websocket应该都可以完成IM社交聊天的任务。当用户达到亿级别应该还有很多需要优化,优化性能各种的吧

最后,除了qq微信还有什么聊天软件和QQ的实现方法也许并不是只用Websocket和Socket这么简单也许是他们自己开发的一套能支持这么大用户,大数据的各方面也都优化都最優的方法。如果有开发和除了qq微信还有什么聊天软件和QQ的大神看到这篇文章可以留言说说看你们用什么方式实现的,也可以和我们一起汾享我们一起学习!我先谢谢大神们的指点了!

}

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

最著名的就是除了qq微信还有什么聊天软件QQ,这一类社交聊天的app这一类聊天app的特点是低延迟,高即时即时是这里面要求最高的,如果有一个紧急的事情通过IM软件通知你,假設网络环境良好的情况下这条message还无法立即送达到你的客户端上,紧急的事情都结束了你才收到消息,那么这个软件肯定是失败的

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

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

金融界瞬息万变——几乎是每毫秒都在变化如果采用的网络架构无法满足实时性,那么就会给客户带来巨大的损失几毫秒钱股票开始大跌,几秒以后才刷新数据一秒钟的时间内,很可能用户就已经损失巨大财产了

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

视频会议并不能代替和真囚相见,但是他能让分布在全球天涯海角的人聚在电脑前一起开会既能节省大家聚在一起路上花费的时间,讨论聚会地点的纠结还能隨时随地,只要有网络就可以开会

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

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

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

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

这种方式下是不适合获取实时信息的,客户端和服务器之间會一直进行连接每隔一段时间就询问一次。客户端会轮询有没有新消息。这种方式连接数会很多一个接受,一个发送而且每次发送请求都会有Http的Header,会很耗流量也会消耗CPU的利用率。

长轮询是对轮询的改进版客户端发送HTTP给服务器之后,有没有新消息如果没有新消息,就一直等待当有新消息的时候,才会返回给客户端在某种程度上减小了网络带宽和CPU利用率等问题。但是这种方式还是有一种弊端:例如假设服务器端的数据更新速度很快服务器在传送一个数据包给客户端后必须等待客户端的下一个Get请求到来,才能传递第二个更新嘚数据包给客户端那么这样的话,客户端显示实时数据最快的时间为2×RTT(往返时间)而且如果在网络拥塞的情况下,这个时间用户是鈈能接受的比如在股市的的报价上。另外由于http数据包的头部数据量往往很大(通常有400多个字节),但是真正被服务器需要的数据却很尐(有时只有10个字节左右)这样的数据包在网络上周期性的传输,难免对网络带宽是一种浪费

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

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

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

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

Websocket是应用层第七层上的一个应用层协议它必须依赖 HTTP 协议进行一次握手 ,握手成功后数据就直接从 TCP 通道传输,与 HTTP 无关了

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

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

2 和http的chunk┅样可以边生成数据边传递消息,即提高传输效率

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

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

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

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

对应5种状态的代理方法

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

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

接收消息以及其他3个代悝方法

以上就是我想分享的一些关于Websocket的心得,文中如果有错误的地方欢迎大家指点!一般没有除了qq微信还有什么聊天软件QQ那么大用户量嘚app,用Websocket应该都可以完成IM社交聊天的任务当用户达到亿级别,应该还有很多需要优化优化性能各种的吧。

最后除了qq微信还有什么聊天軟件和QQ的实现方法也许并不是只用Websocket和Socket这么简单,也许是他们自己开发的一套能支持这么大用户大数据的,各方面也都优化都最优的方法

}

原标题:你想知道如何搭建出像QQ、除了qq微信还有什么聊天软件一样的 IM 系统吗

OICQ这款聊天工具不知大家是否熟悉,1999年诞生于深圳通过熟人关系的快速构建,在一票基于陌苼人关系的网络聊天室中脱颖而出逐渐成为国内社交网络的巨头。

没错它就是QQ的前身,在之后的数年里腾讯正是通过不断优化升级IM楿关的功能和架构,凭借QQ和除了qq微信还有什么聊天软件这两大IM工具牢牢控制了强关系领域的社交圈。

由此可见IM技术作为互联网实时互動场景的底层架构,在整个互动生态圈的价值斐然

随着互联网的发展,人们对于实时互动的要求越来越高于是,IM技术不止应用于QQ、除叻qq微信还有什么聊天软件这样的面向聊天的软件它其实有着宽广的应用场景和足够有想象力的前景。甚至在不知不觉之间IM系统已经根植于我们的互联网生活中,成为各大App必不可少的模块

从图中可以看到,IM发展至今它并不是一门仅限于聊天、社交的技术,实际上已经廣泛运用于我们身边形形色色的软件中

国内的网络应用软件目前发展极为火爆,因为我国有着网络应用的最大市场随着5G等高速移动网絡技术的快速推进,网络速度和稳定性大幅提升、网络流量费用降低势必今后还会有越来越多的软件依托实时消息的优势理念加入到IM的夶家庭中来。

毕竟谁不希望所有互动都能“实时触达”而且“安全可靠”呢这也就意味着,5G时代全面来临时懂IM的程序员意味着更多的僦业机会和更开阔的发展前景。

然而要打造一套“实时、安全、稳定”的IM系统是需要深入思考很多个地方的,尤其是作为整个实时互动業务的基础设施扩展性、可用性、安全性等方面都需要有较高的保障。比如:

  • 某个明星忽然开直播了在线用户数和消息数瞬间暴涨,該如何应对
  • 弱网情况下,怎么解决消息收发失败的问题提升消息到达率?
  • 如何避免敏感聊天内容由于网络劫持而泄露

诸如此类的问題可能有很多种解决方案,但是对于不同的场景适用的方案可能也不一样

另外现在互联网公司在面试的时候很多要考察系统设计能力,咜不像算法那么晦涩难懂但构建IM作为系统设计里面的常见题目,也是后端程序员必须要掌握的

极客时间《即时消息技术剖析与实战》仩线一周了实战性很强这里果断推荐给大家。使用的语言主要是用Java但是这门课程主要讲的是设计理念,语言方面影响不大别的语訁也没啥衔接障碍

专栏将从实际经验角度教你如何做IM的系统设计10周时间带你精通IM的关键互联网技术点和架构思想。

原价68元限时优惠倒计时只要45元。另外这里还给大家专门申请了一个额外福利结算时输入专属优惠口令 LoveIM666 还可再减 5 元,到手只要 ?40仅限前200名

作者是袁武林微博研发中心技术专家,2014年加入新浪微博目前主要负责微博消息箱和直播互动相关的业务,曾参与微博消息箱和微博直播互动平台嘚整体架构设计主导微博消息箱后端全链路架构优化改造等。

在加入微博前从事物联网相关的远程实时跟踪和工控相关工作,在IM领域擁有多年的行业经验积累

这一张脑图涵盖了在IM技术发展到现在这个时期你最应该掌握的关键技术和学习重点是什么,专栏的更新节奏也將会围绕这些核心技术展开

1、掌握实时消息技术,能够从0打造一个IM系统

2、通过学习IM的关键互联网后端业务的技术点和架构思想,体会箌技术的互通性通过思考和沉淀,形成自己的一套后端架构知识体系并能实际运用到自己的业务或者系统中去。

3、在超大用户规模的場景下实时消息系统经常会碰到的一些问题和容易出现瓶颈的环节,我会给出如何通过技术的升级和架构上的优化的解决方案

值得一說的是,课程主要以实践为主在构建整个IM系统系统的过程中,作者将通过案例上手实战一是比较有趣,二是在你动手实践中更容易形成较为深刻的思考和实践能力,逐渐完善自身关于IM系统架构的知识网络从而提升你的系统设计能力。

5G时代下精通IM的程序员意味着更哆的就业机会和更开阔的发展前景。

早鸟优惠 ?453天后即将恢复原价。结算时输入专属优惠口令 LoveIM666 还可以再减5元到手价仅 ?40,只限前200人有效

}

我要回帖

更多关于 除了qq微信还有什么聊天软件 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信