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主页面却能及时收到某个好友的消息或者弹窗呢?我想这应该是使用了手机的“推送”功能;当手机接收到推送信息,寻找本地存储的好友列表,比对,然后对这个好友的聊天信息进行更新.
好了,两个猜想完毕,如您有更好,更合理的猜想,请留言给本帅比哦.
所以恶补了下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主页面却能及时收到某个好友的消息或者弹窗呢?我想这应该是使用了手机的“推送”功能;当手机接收到推送信息,寻找本地存储的好友列表,比对,然后对这个好友的聊天信息进行更新.
好了,两个猜想完毕,如您有更好,更合理的猜想,请留言给本帅比哦.
相关文章推荐
- 猜想 QQ好友分组 (微信好友)多层次分组策略 QQ好友过多
- android:listview实现qq,微信好友列表(头像,昵称,个性签名)
- QQ被盗后如何恢复好友
- 实现二级列表(实现QQ的好友列表)
- 分享一个直接加QQ好友的链接或会话的
- Hbulider中,QQ分享到好友,总是提示,分享失败,请检查网络并重试
- QQ好友列表
- Android中实现类似qq好友列表展开收起的效果
- 好消息!QQ好友数量上限提升
- iOS开发UI篇—使用UItableview完成一个简单的QQ好友列表(一)
- c++/MFC CSocket仿QQ聊天软件,实现1对1聊天,群聊
- 找回被删的QQ好友
- SlideMenu(老版本QQ好友分组列表样式)
- js实现打开网页自动弹出添加QQ好友邀请窗口
- 用ExpandableListView实现类似QQ好友列表
- iOS-QQ好友列表 iOS 页面间几种传值方式(属性,代理,block,单例,通知)
- Socket实现仿QQ聊天(可部署于广域网)附源码(2)-服务器搭建
- android 仿QQ好友动态 title滑动渐变
- 利用Wireshark任意获取QQ好友IP实施精准定位
- 如何巧用Win7资源监视器查看QQ好友IP