日期:2014-05-20  浏览次数:20999 次

求助:QQ的实现原理
各位大哥,小弟最近在做类似QQ的即时通讯软件,从网上找了一些IM的资料,QQ的通讯原理是否和下图一样:
                                            |IM服务器|
                                            /                 \
                                          /                     \
                    LOGIN/OUT   /TCP/UDP           \
                                      /                             \
                                    /                                 \
                            |用户A|------------|用户B|
                                                      TCP
还有如下问题:
1.是不是每个用户都要以TCP连接登陆了IM服务器?如果是这样,IM服务器不是要启动相应的监听线程,那服务器的负荷是不是会很重?QQ是如何做到的?
2.QQ是不是TCP和UDP一起用?如果用UDP,如何做到信息的可靠发送?
3.QQ用的是UDP打洞技术还是HTTP遂道?
4.因为用户一般都是在局域网内,地址都为私有IP,IM服务器是如何将信息转发到用户的?

------解决方案--------------------
QQ通讯原理:

QQ有两种登陆模式
一种是比较不常用的:直接登陆服务器,所有信息由服务器转发,这种登陆模式有个特点就是你会发现你使用获取IP版本的QQ无法获取对方的IP~
另一种是普通的:首先连接登陆服务器,在给对发发消息的时候,首先尝试与对方进行打洞连接,如果可以打通消息直接发送给对方,如果不能打通,则消息转发服务器,由服务器转发.

现在回答你的问题
1.是不是每个用户都要以TCP连接登陆了IM服务器?如果是这样,IM服务器不是要启动相应的监听线程,那服务器的负荷是不是会很重?QQ是如何做到的?
答:IM登陆服务器有一台主服务器,这台服务器负责将登陆者的请求转发给与登陆者地区最接近的服务器.而那些登陆服务器的工作是通过多服务器协作完成的

2.QQ是不是TCP和UDP一起用?如果用UDP,如何做到信息的可靠发送?
答:QQ即可以使用TCP也可以使用UDP,但QQ默认是使用UDP协议,因为UDP协议消耗资源小,发送速度快,但当UDP协议不能正常转发的时候,就会采用TCP协议进行发送.
而信息的可靠发送是通过各种验证机制来完成的,这一点你可以去GOOGLE之类的网站去搜索下.

3.QQ用的是UDP打洞技术还是HTTP遂道?
答:发送消息的时候是UDP打洞,登陆的时候使用HTTP~因为登陆服务器其实就是一个HTTP服务器,只不过不是常用的那些,那个服务器是TX自行开发的.

4.因为用户一般都是在局域网内,地址都为私有IP,IM服务器是如何将信息转发到用户的?
答:如果使用TCP就没什么好说了~由内网向外网连接,只要能够连接上进行握手了,消息就可以畅通无阻的进行发送了.如果使用UDP的话,就是使用的打洞技术了,只要通道打通了,发送消息基本和TCP没什么区别,要做的只是维护消息的完整性而已.