聊天工具的开发(1)

来源:互联网 发布:津巴布韦通货膨胀知乎 编辑:程序博客网 时间:2024/06/05 20:13

这一段时间公司的项目不是特别的紧,无事之余我突然有一种想开发一个聊天工具的

想法,于是就一步一步做了起来。

         首先是对于目前网络上经常使用到的聊天工具进行了分析,对于我来说最熟

悉的就是QQ。我对使用QQ的操作以及QQ的执行过程进行了仔细的观察,当然观察的内

容也只是和我想做的部分相关,之余QQ游戏之类没有做详细的调研。我想对于QQ这样

一个聊天工具平台而言,主要的架构几乎肯定是C/S的结构。腾讯公司有自己的QQ服务

器,每个QQ用户具有QQ客户端。对于一个普通用户而言,使用QQ的过程大家都是十分

熟悉的,肯定是先要登录QQ网站申请QQ账号,然后打开QQ客户端输入ID号与PassWord

登录QQ服务器,然后与好友聊天或在自己的群中聊天。

         我在做我的聊天工具的过程中一直在考虑几个问题:

         1客户端与服务器究竟是TCP连接,还是UDP连接?对于每个客户端而言,登

陆时服务器需要做那些工作?

          我的聊天工具采用了TCP连接,我在服务器中创建了一个监听套接字,监听

客户端发送的连接请求。当有一个客户端准备上线时将向服务器发送连接请求,监听

套接字将创建data socket与此客户端进行对话。然后用户输入ID和PassWord进行登录

,客户端将把ID和PassWord发送给服务器,服务器接收到登录信息后将查询用户信息

数据库,检查登录信息是否正确。如果登录信息有误则服务器向客户端发送出错提示

,如果正确会进一步检索数据库,找到此客户的好友并发送好友信息至客户端。

           也就是说,服务器会对客户端的登录信息进行数据库检查,会将客户端的

好友信息发送给客户端。前几天看了别人对于OICQ的评述,有人认为在客户端登录时

,对于用户登录信息的CHECK首先是在客户端完成的,也就是说如果你过去在某台电脑

上用过OICQ,那么的你上次输入的密码将被保存在本地,当然密码是加密的,当你再

次在这台电脑上登录时,客户端会首先将你输入的信息与本地保存的信息进行比较,

如果正确就算是登陆成功,如果不正确会与服务器连接,服务器会去查询数据库。我

觉得这个登录的采取方案最大的好处就是减轻了服务器的压力,服务器少查询了一次

数据库。另外,我的聊天工具的服务器会在客户端登陆成功以后,将客户的好友信息

放送给客户端。这里的好友信息包括好友的id、nickname、好友目前的ip、好友的状

态(在线或是离线或是隐身),但是我观察了QQ当你的网络处于离线状态时,你登录

QQ,虽然无法登陆但是却能显示出你的好友,当然他们都是离线的,这说明好友的信

息部分是存在本地机器中(前提是以前你至少在这一台电脑上用过一次QQ)。这种实

现机制的好处也是减轻了服务器的负担,同时也减轻了客户端的负担,每一次用户成

功登录以后,服务器不在需要向客户端传递其好友的信息,那么好友的目前状态信息

由谁来通知呢?我想最好的办法就是由好友自己来传递。

原创粉丝点击