QQ等即时通信软件的原理,大家来讨论一下吧(100分)

  • 主题发起人 linzhengqqun
  • 开始时间
L

linzhengqqun

Unregistered / Unconfirmed
GUEST, unregistred user!
众所周知,QQ之间的通信是以UDP为基础的,这个可能不是一个难题
但和服务器之间的通信就一个很大的技术问题了。
首先,注册一个会员,服务器那边肯定会加一条记录。
   而登陆的话,服务器会查询该成员的信息,然后返回有用的信息给成员,如他的好友列表,个人资料,这就是一个大问题了,如果同时有好几千个人同时上线,则服务器会同时收到好几千条信息,而要同时返回好几千信息给那些成员,这是一个怎么样的服务器,怎么可能会有这样的能力呀。
   还有,一个成员除了自身的信息保存在服务器之外,好友等的信息也会保留在服务器中,假如一个成员有一百个好友,那全国有一千万个成员吧,那不是这个服务器要存1亿条记录。因为一个成员对应一百个好友,一千万个就应该有一亿条记录了。
   另外还有好多好多的技术无法理解

上面说了这么多,只是想请大家来讨论一下,那些即时通信软件的设计原理是什么,特别与服务器的通信,有那位高手做过这方面的。可以在这里发表一下你的说法。这纯粹是给分给大家,参与讨论的都有分的,只是有多有少而已。
 
群集数据库吧。多台主机响应客户请求,并实现负载平衡。
我只是猜一猜了。
 
有很多个服务器的!
 
服务器端估计是只有一个主程序的,收到请求时,调用其它内部联网高速主机处理并返回请求。
你可以观察一下udp双方的情况看。
netstat 命令看
 
是啊 ,这个问题我也想问来着
 
嗯,学习一下,收藏
 
关于服务器方面的,是 Concurrency Control (对不起,我电脑技术方面都是在国外学的,所以只能用英文了,不是炫耀),利用锁的方法来进行 Transaction Manage.
 
用户数据应该集中在一个数据库中,不然很多业务功能不好开展,而且也不利于系统新添功能,这些查寻功能主要是数据库技术和数据库设计了,一亿条没关系,而且他的设计也不是这样的,有好多技术细节可以优化它。。。。
 
QQ和服务器之间的通信是不是基于TCP协议的,服务器能同时处理好几千QQ传递的信息,需要用到什么技术????
 
使用的是多台服务器共同工作,关于数据库也同样是在多台服务器,这在SQL Server中都可以实现的。
 
好友信息没有在每个用户信息中储存
而是每个用户都有一个好友表,在这个表中记录这好友的代码(QQ 号),妮称

好友的信息是从用户信息表中查询的,当然是按好友的QQ号查询。所有不存在
“一个成员对应一百个好友,一千万个就应该有一亿条记录了”这个问题。

还有,就是好友信息查询后,就保存在本机,所以不刷新的话,好友信息既是改变
你看到的还是没变。也就是不是你每次查看好友信息都要访问服务器的,访问服务器
只是在你第一次查看好友信息和刷新好友信息时。
 
“而是每个用户都有一个好友表,在这个表中记录这好友的代码(QQ 号),妮称”
这个也有问题呀,每一个用户如果有一个好友表,那么如果用户的数量是一千万个。不就是要有一千万张好友表了吗。会不会好多张呀,
再有,如果真的是这么,是不是每注册一个成员,服务器那边就得动态生成一张好友表呀。
 
qq不用tcp,是用udp的。
腾讯的服务器有一层楼,不用为他担心并发访问,就算不够了,他还可以再添。

--每一个用户如果有一个好友表,那么如果用户的数量是一千万个。不就是要有一千万张好友表了吗
不会,只要一张就可以了。
 
我知道QQ之间的通信就是基于UDP,但QQ和服务器之间的通信也是基于UDP的吗,
不是基于TCP的吗。
 
"这个也有问题呀,每一个用户如果有一个好友表,那么如果用户的数量是一千万个。不就是要有一千万张好友表了吗。会不会好多张呀,
再有,如果真的是这么,是不是每注册一个成员,服务器那边就得动态生成一张好友表呀"

是的,Tencet就是这么处理的,没张好友列表的名字对应于用户QQ号,这样很容易管理,查询。

“我知道QQ之间的通信就是基于UDP,但QQ和服务器之间的通信也是基于UDP的吗,
不是基于TCP的吗。”
老的QQ与服务器连接是UDP,通过QQ定时向服务器发送特定格式的信息来确定QQ在线。如果在一定时间内服务端没有收到QQ发来的信息,那就判定QQ 掉线。
新的QQ也使用TCP跟服务器连接,不过只有会员能使用。
 
顶部