当前位置: 技术问答>linux和unix
重分寻求:做类似于QQ的服务器端程序之实现流程?
来源: 互联网 发布时间:2014-11-26
本文导语: 重分寻求:做类似于QQ的服务器端程序之实现流程? 计划做个QQ的服务器端程序,对UNIX下的信号、进程间通信、socket已熟悉,但还摸不着实现方法,希能寻求具体的实现流程。 | QQ分为客户...
重分寻求:做类似于QQ的服务器端程序之实现流程?
计划做个QQ的服务器端程序,对UNIX下的信号、进程间通信、socket已熟悉,但还摸不着实现方法,希能寻求具体的实现流程。
计划做个QQ的服务器端程序,对UNIX下的信号、进程间通信、socket已熟悉,但还摸不着实现方法,希能寻求具体的实现流程。
|
QQ分为客户端和服务器端两套不同的程序,而我们通常使用的当然是QQ的客户端了,客户端是独立的应用程序,它和服务器的交互采用的是TCP/IP,但它和服务器很少进行交互,只有在必要的时候,比如上线,查询好友,添加好友等,而平时我们和好友通讯用的是点对点,无连接和面向消息的UDP协议。这样做大大减轻了服务器的负担。服务器上的程序一直都在某个端口监听是否有消息从客户发来,为了保证即时处理客户消息,它一但监听到消息后,会把这个消息作为参数,传递给一个专门处理消息的Thread扩展类来处理,比如,如果这个消息是上线,就连接数据库将此用户的状态改为在线,如果是查询目前在线的好友,那么就查询后台数据库,并向客户返回结果。在你上线的时候,有两个参数显地十分重要,你的IP地址,和你的QQ的端口(一般PORT都是固定或相同的),而且这两个参数需要记录在数据库的用户信息表中一直跟随你,直到你下线或重新登陆改变了IP。因为用户和用户是UDP方式通讯,而这两个参数是必须需要的。设想我们刚打开自己的QQ吧,这样说比较自然一点:打开QQ,出来登陆提示框,填上我们的用户名和密码,服务器在监听到这个请求后会判断是否正确并返回,如果正确,服务器会检索添加你为好友的那些用户并向他们发送你登陆的消息。现在我们登陆了,首先我们应该得到自己的好友列表,大家还记得以前很早用QQ的时候吗,登陆花的时间比较长,有个对话窗口说的是正在获取好友资料,弄不好还
会登陆超时,其实就是这一步了。现在的QQ有了改变,只要你在某台机器上登陆过一次,它会在安装目录下为你建立一个用户目录,把你的好友资料以文件加密的形式记录在文件里,而是第一次在某机器上登陆,服务器也会快速地返回好友非常少的资料(如IP,在线状态),所以你会看到他们的头像全是默认的企鹅,用户名只有个号码,至于其他的详细资料,以多线程向服务器获取和更新。好了,反正现在你在线的好友都知道了他们的IP和PORT,这是跟随他们的其他资料一并传回的,你已经可以给他发送消息了(一个UDP数据包),
而服务器在告诉他们你登陆的时候,自然也把你的IP和PORT告诉了他们。
会登陆超时,其实就是这一步了。现在的QQ有了改变,只要你在某台机器上登陆过一次,它会在安装目录下为你建立一个用户目录,把你的好友资料以文件加密的形式记录在文件里,而是第一次在某机器上登陆,服务器也会快速地返回好友非常少的资料(如IP,在线状态),所以你会看到他们的头像全是默认的企鹅,用户名只有个号码,至于其他的详细资料,以多线程向服务器获取和更新。好了,反正现在你在线的好友都知道了他们的IP和PORT,这是跟随他们的其他资料一并传回的,你已经可以给他发送消息了(一个UDP数据包),
而服务器在告诉他们你登陆的时候,自然也把你的IP和PORT告诉了他们。