您的位置:首页 > 其它

QQ好友与socket猜想

2017-12-23 16:23 288 查看
最近在做的项目有关于socket的知识,使用了一个第三方的socket库,发现这个第三方库的每一个socket链接都使用了一个新的GCD线程,

所以恶补了下socket知识,并延伸了下.

我们知道GCD一般是用来处理多线程的,一个程序就是一个进程,进程的运行单位就是线程,也就是说一个app应用里边最少要有一个线程->主线程.

当然,我们要处理比如post请求数据,与直播视频的时候,不可能只有一个主线程,这样肯定会造成卡顿,因为frame相关的刷新界面操作都是在主线程运行的,所以要使用多线程

,但是线程并不是越多越好,越多就越流畅,因为线程也是占用系统资源的,多线程实际上是cpu快速切换各个线程的处理给我们造成同时处理多个线程的假象,同一时间,cpu是只能处理一个线程的任务,而且一般情况下,主线程分配的资源是1M,自线程是512kb,当线程达到某一数量,程序也会崩溃。

所以我就联想到:

QQ的好友聊天是不是socket链接?如果是的话socket链接是在点击某个好友的时候创建,还是在主界面创建的时候就出现?

猜想1:如果是在主界面的时候就创建所有好友相应的socket链接,那么假设手机运行是1g,我有1024*2个好友,那么就可能崩掉,但是如果不是这样,那为什么,我在qq主页面的时候,这些好友里如果有人向我发信息,我这里就可以即时显示呢?所以有了猜想2.

猜想2:每次点击好友,并进入与这个好友的对话聊天中的时候,创建一个socket链接,当退出与这个好友的聊天室,socket关闭,也就是说,实际上,我使用QQ,同一时间下对于聊天而言,只建立一个socket链接,socket连接数,与好友数无关;那么为何我在QQ主页面却能及时收到某个好友的消息或者弹窗呢?我想这应该是使用了手机的“推送”功能;当手机接收到推送信息,寻找本地存储的好友列表,比对,然后对这个好友的聊天信息进行更新.

好了,两个猜想完毕,如您有更好,更合理的猜想,请留言给本帅比哦.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: