各位大哥,小弟最近在做类似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服务器是如何将信息转发到用户的?

解决方案 »

  1.   

    QQ的不知道
    建立连接时要监听,打洞后IM就不管了http://www.ppcn.net/n1306c2.aspx
      

  2.   

    1、你去了解看看TX有多少个服务器。
    2、确认和重发机制,UDP 报不可靠,但,可以要求对方返回一个确认。发送方没有收到确认就重新发送。
    3、这个应该是前者——猜测
    4、登录之后,总有一个连接 active 的——QQ软件有很多个Listening (这一点很变态)。
      
      

  3.   

    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没什么区别,要做的只是维护消息的完整性而已.
      

  4.   

    谢谢flczlxy(幸福的耗子),令我茅塞顿开
      

  5.   

    qq消息的确认和重发机制是怎样的?如果只用TCP来做而且数据量也不太大,最多能支持多少个用户?
      

  6.   

    qq消息的确认和重发机制是怎样的?
    答:TX使用的我也不太清楚,应该是自己定义的一套机制.不过现在使用UDP进行安全的消息发送已经不是什么难事了,你可以去搜"UDP 可靠传输"就可以搜到很多你想要的内容了如果只用TCP来做而且数据量也不太大,最多能支持多少个用户?
    答:TCP数据量相对于一般的服务器甚至游戏服务器都不存在什么问题.一台服务器甚至可以登陆上W人登陆并进行游戏.不过QQ同时的消息并发只有几万么?所以全部用TCP是不切实际的,就算TX有足够的实力去组件超强的服务器组来实现,也是花大价钱买0回报的事情,你认为TX有那么笨么?^^
      

  7.   

    flczlxy(幸福的耗子),给个联系方式可以不?