腾讯QQ的开发分客户端软件和服务器端软件两部分。
客户端采用 Microsoft Visual C++开发;
服务器端软件采用Linux gcc开发 ;
数据库采用MySql 数据库。
腾讯QQ采用标准的TCP/IP协议为通信协议。
TCP/IP协议中又分为TCP协议和UDP协议,TCP协议是面向连接的协议,它比较安全、稳定,但是效率不高,占用资源较多。UDP协议是无连接方式的协议,它的效率高,速度快,占资源少,但是其传输机制为不可靠传送,必须依靠辅助的算法来完成传输控制。QQ采用的通信协议以UDP为主,辅以TCP协议。由于QQ的服务器设计容量是海量级的应用,一台服务器要同时容纳十几万的并发连接,因此服务器端只有采用UDP协议与客户端进行通讯才能保证这种超大规模的服务。
腾讯QQ客户端之间的消息传送也采用了UDP模式,这不同于国外的ICQ在客户端之间采用TCP进行通讯的模式。因为国内的网络环境非常复杂,而且很多用户采用的方式是通过代理服务器共享一条线路上网的方式,在这些复杂的情况下,客户端之间能彼此建立起来TCP连接的概率较小,严重影响传送信息的效率。而UDP包能够穿透大部分的代理服务器,因此我们在开发QQ的时候选择了UDP作为客户之间的主要通信协议,因此网友会觉得用QQ传送信息要比ICQ及其它采用TCP协议的ICQ类软件快。当然,UDP协议优点突出,缺点也很明显:UDP包的传送是不可靠的传输,它不象TCP一样有包重传等机制,因此采用UDP协议的信息在传送过程中很容易丢失,这样就需要辅助的算法实现包重传机制以保证信息不会丢失,而QQ服务器的负荷非常重,因此在QQ
99b 0425之前我们只是在客户端到客户端之间传送消息时采用了这个辅助的机制,当消息在客户间直接传送无法到达时就需要通过服务器来中转,由于服务器端在老版本的时候迫于负荷过重的压力没有对主动发往客户端的信息进行传输控制,因此在老版本的时候容易造成通过服务器中转的信息丢失的现象。在QQ99c 0725之后我们单独设立出了几台专用的服务器采用包重传机制来中转消息(仅限于99c之间传递的消息),确保通过服务器转发的消息也能够发送到对方的QQ。
相关文章
- 王者荣耀-是用什么编程语言开发的
- 世界上最著名的操作系统是用什么语言编写的?
- 百度数据开发面试题 Oracle行列转换Oracle行转列、列转行的Sql语句总结(转)链接中的基本都用到。1)wm_concat、listaggoracle拆分逗号分隔字符串 实现split博主这里没记住正则,开始傻傻的用循环暴力,后来面试的大叔让我随便用什么语言博主就写了个java的List数组拆分,后来想想完全不同,这里应该是String的split,用oracle的话就用正则,其他语言支持正则的都可以用正则。这是老夫版的,面试写的随意,使用方法名递归,估
- 关于.net连接mysql数据库的问题!用配置连接mysql的时候,server写的是服务器的ip,为什么会连到本地数据库上?
- 什么是递归?用Java写一个简单的递归程序
- 星际争霸是用什么语言写的?
- 这段代码是用Pl / Sql编写的,如果没有,那么它是什么语言?
- 请问:网络游戏的外挂是用什么语言写的?基本原理是什么?
- 参与这个帖子的弟弟妹妹们,请进来领分!----大姐请弟弟妹妹们帮忙了!用最简单的语言解释什么是javabean,EJB,STRUTS,JAVABEAN,JSP/Servl
- QQ是怎么用c语言写出来的,谁有代码