UDP在新版QQ上的的应用[原创]

900126 2004-07-04 09:14:32
新版QQ有一些变动,比如在发送文件或进行语音视频连接时,都提示“已经建立了UDP连接”,那么什么是UDP连接呢?
我们知道,进行TCP通讯时,先要建立连接,而UDP是一种无状态交换,无所谓连接。需要发送时,直接给出目标地址和端口就可以。那么这里的“连接”是什么呢?
其实这里是一种逻辑上的连接。UDP通讯与TCP通讯的一个重要区别就是,TCP连接的结果是实现了一个通讯管道,所谓管道,包含一个含义,就是先进先出,先发出的信息必然先到达,因此对发送的数据可以保持“序”,有序的数据流。而UDP则没有这个条件,如果网络环境比较复杂,根本不能指望先发出的信息会先到达。因而,要实现例如语音和视频交换,就必须解决数据包顺序问题。在很多情况下,使用TCP而不使用UDP往往也是这个原因。
那么建立“UDP连接”是什么意思呢?其实是建立一种逻辑(用户协议)上的过程准备。发送方发送一种特定标识的数据包,当接收方收到时,就排列在接受器里,如果包是顺序的,就把已经到达的部分(一个或多个包)提交“数据到达”,如果顺序不正确,就返回信号,申请未到达的包,如果包的号码重复,就放弃后来的数据包,以此实现像TCP一样的“管道效应”。
使用UDP的原因,当然是为了对付上百万的在线用户(用TCP是不可能的)。而更广泛使用UDP(原来是使用TCP实现视频和文件交换)则是为了通过各种网关。
说这些干吗呢?那是因为最近P2P模式的应用越来越受到重视,而在现有网络环境下,只有UDP最方便和保险。很多人在使用UDP过程中,经常由于某些原因而拿TCP打补丁,其实,用好UDP可以解决大多数通讯应用。
还有一个,QQ的“屏幕拷贝”是如何实现的呢?方法很简单,复制当前屏幕,并用一个窗体全屏显示,你所进行的区域选择,是在那个窗口上(好象真在WINDOWS上),当你双击确认时,双击的是QQ的图片窗口,在QQ取得所有需要的信息时,那个窗口关闭,恢复实际的屏幕。
...全文
366 点赞 收藏 15
写回复
15 条回复
xihou 2005年04月07日


此番原理,深入浅出,真乃高人,受益匪浅!



回复 点赞
zyg0 2004年09月04日
高手说话了
回复 点赞
cueixu1 2004年09月04日
精华。
回复 点赞
boyzhang 2004年07月17日
Up
回复 点赞
900126 2004年07月17日
其实每秒种100个登录,用1台SQL-SERVER就解决了。当然全部服务(包括搜索,注册)还应该增加设备。
回复 点赞
nik_Amis 2004年07月08日
good
回复 点赞
900126 2004年07月08日
设百万人在线,3小时内登录,百万/3600/3=100,用二台P4 2.0完全可以胜任(一台做SQLSERVER服务器)。
回复 点赞
900126 2004年07月08日
数据库速度的诀窍不在于用什么数据库,而是数据库的工作状态。登录服务器的数据库工作方式是“经常打开”,所有新增请求(包括用户注册),都被排队,每60秒钟数据库刷新(refresh或关闭)一次,来加入更新信息。这是因为数据库慢就慢在打开的过程。因此,每秒钟查询上百次,就我们用的破机器+SQLSERVER,也是小菜。
回复 点赞
artliu520 2004年07月05日
怎么强啊 Learning!
回复 点赞
ykwang 2004年07月05日
我想登入应该如同楼主所说, 就算索引很快,但是成千上万的用户一登录的话,快的服务器也要累趴下.
回复 点赞
lzgvcd 2004年07月05日
学习中....我想问的是qq用的是什么数据库,他的记录如此至多,但是你的登陆是很快就可以成功,而我自己的程序中如果记录超过了10万条的时候,数据库搜索很慢了,我用的是sqlserver数据库有什么好的办法能加快访问速度吗?
回复 点赞
qyii 2004年07月04日
其它都能认同.登陆那不能~腾讯不会用数百个服务器来管理登陆的!就算10个也不可能.用号码索引数据库搜索就可以完成了!那用这么多个服务器!

登陆有登陆用的服务器,验证有验证的程序.信息服务器又是另一台了!
也不关乎于有没有用QQ的问题,想一想就能通!验证通过就实施,实施也毛病就DEBUG.又验证实施!做程序应该有这种精神,但Sorry~我没有!
回复 点赞
900126 2004年07月04日
再说一下QQ的广告。QQ的广告像网页一样灵活,所有在网页上能出现的东西在QQ广告里都能实现,许多人为此到处找动画控件,其实根本不是动画控件,只是WEBBROWSER控件,一个WEBBROWSER控件解决了所有问题:将你在网页上看到的所有东西都弄上去了。当然,用的不是WEBBROWSER的NAVIGATE方法,而是直接对DOCUMENT进行操作(好象微软未公开)。
回复 点赞
900126 2004年07月04日
顺便说一下QQ登录方案的设计
用户登录时,常见的提示是“所输入的口令与上次使用的口令不一致”,另外就是“超时”。大型P2P应用都有这个特征,就是没有“用户不存在或口令错”的提示,为什么呢?
QQ登录申请是用UDP发出的,接收服务器如何在数千万用户记录的数据库里检查你的用户名和口令呢?其实根本就没有完整的数据库,登录和搜索指令都被转发给了100个服务器,这些服务器是专门用来登录和搜索的。如果搜索到了,就(直接)给用户发会响应信息,而搜索不到的,就当场放弃。于是如果一个用户名或口令错的请求(或搜索一个不存在的用户),就只有靠超时来确定搜索结果。

再说一下用户下线
当一个用户下线时,另外一个用户立刻就得到消息,好象是TCP中断事件响应一样。其实,用户下线的消息是用户自己发送出去的。就是说如果你是正常下线,则程序会给所有在线用户发送下线消息,也给服务器发送消息。而如果是因为网络中断,或程序非法退出,好友就得不到下线消息——事实正好如此。因此,线路中断造成的用户下线,连服务器都不知道。这就是我们在QQ里搜索到的一些人,其实根本不在线的原因(隐身除外)。
回复 点赞
daisy8675 2004年07月04日
对不起,我对QQ没有研究。。。。我N年没有用的。。。
回复 点赞
发动态
发帖子
网络编程
创建于2007-09-28

1145

社区成员

1.8w+

社区内容

VB 网络编程
社区公告
暂无公告