服务器和客户端之间通讯也用UDP吗?

解决方案 »

  1.   

    QQ服务器是单线程的???不会吧:O虚连接是什么意思?
      

  2.   

    我猜想:
    实际上你的机子上运行了一个socket服务程序(线程),它负责接收消息,这个线程启动时将自己的信息纪录下来,在另一个线程(负责发送消息)登录时送给icq服务器。在icq服务器端只是存储你机子上的服务器的信息(ip,port),通过连接你机子的socket服务器发送消息。icq服务器端的socket服务程序负责接收消息。线程处理:icq服务器端每一次接受一个消息时开一个新线程,接受完线程结束。icq客户端一共两个线程,一个负责接收消息,另一个发送消息。如果我做,就用这样的结构。
      

  3.   

    to:bdsc() 你有没有想过QQ要面对是上千万的用户,照你的方法那应该需要开多少个线程多少台服务器呢?
      

  4.   

    hover(翔)(想弄几颗红星星玩玩) :请看清楚,再想想,嘿嘿
      

  5.   

    我也认为是用UDP虚电路来实施的。
    我猜想服务器只是作为一个在线数据库,例如当你的重新安装qq时,不用担心
    自己又要把好友重新添加一遍。
    很多服务都是靠客户端自己来实施的,例如用广播的形式来通知他的在线好友。
    这只是我的一点推测,希望有高手来道破天机!
      

  6.   

    那如果服务器对客户端和客户端对客户端通信都是用udp的话,服务器如何判定客户端是否掉线呢?难到要每格n秒就向所有在线的客户端发送“你在吗”??然后一堆客户端向服务器喊,“我在”,天啊,服务器能受得了吗?
      

  7.   

    用UDP,不一定要每个用户都建立线程啊,完全可以一个线程负责啊,客户端每次发消息时把自己的IP地址等信息发上去,服务器收到就转发到目的地
      

  8.   

    同一个Socket是不能在多个线间共享的,还有必要为它建立两个线程吗?to:sintenc(dbb) 对,这就是UDP
      

  9.   

    我觉得可能一般情况下qq在第一次登录到服务器签到后应该就和服务器没有联系了
    用户之间的会话用udp 不需要服务器跟踪
    在正常退出qq时 再到服务器那里注销自己
      

  10.   

    虚电路也是面向连接的,QQ应该是基于UDP的吧。至于数据向上传递时我觉得时有一个数据结构用以存放用户的信息,在向用户传送时数据先放在缓冲区重,经过区分后传入相应的结构
      

  11.   

    to: onlynight(歧异) 你有没有想过如果客户端断电或网络断开呢?照你的说法QQ客户如果自不注销自已那么就会一直在线罗??
      

  12.   

    还有一个问题,就是QQ服务器的接收线程,在用户巨多的时候,同时给QQ服务器发消息,他的倒底是怎么处理的?
      

  13.   

    是不是可以这样:
    再用户登录的时候,本地QQ和服务器的连接是用的TCP,然后服务器就会的到你的ip和port。
    当有好友登录时,就会向服务器索要相关的信息,然后QQ和QQ之间就用UDP通信。
    如果当通信双方有一方退出时,就会到服务器注销,这时服务器就会通知他的好友他已经下线,然后服务器便会代收他的所有信息,并在他下一次登录的时候将所有代收的信息都转发给他。
    我是这么想的,就是有一点不知道如何解释:
    如果我在和好友聊天的时候突然掉线了,那我重新登录之前的信息又是如何收到的呢?然到是服务器在不停的查询我是否在线吗?不会吧...