既然QQ能仿ICQ, 咱java也来个仿QQ.
在我刚学完java后,就想做点什么项目锻炼下自己的技能。凑巧的是,我一个同样学java的朋友在做一个仿qq的项目,不过他做的实在太丑了。
然后他想让我也一块做这个,我心想,像qq这么高难度的项目肯定复杂得要死,所以我是想都不敢想的。
没想到后来的偶然的一天,我手痒了,想用java做一个简单的聊天室。然后说做就做,着手开干,不一会,凭着对java和通信的有些基础的掌握,写出了一个简陋的聊天室。简陋到粗糙的地步,粗糙到只有聊天的文字一行一行的堆砌在面板上,早期效果截图没保存,不过大家凭着自己的想象力也不难脑补。
后来,我想,要是能给加个气泡就好看多了,于是,开始上网查资料,奈何,资料撩撩几笔,而又残缺不全,只能从有限的资料里找些蛛丝马迹,网上找来的知识零零散散,再凭着自己的理解进行简单拼凑之后,又开始上手开发。
在经过了数个日日夜夜之后,终于搞成了,下面来一张早期的效果图给大家看看:
当然,这个时候还只有一个聊天窗口,登录窗口和主窗口都没有,可以说是简易版的聊天软件了。
在做完这个之后,我成就感爆棚,顿时自己又飘了,想着这个能做完,离qq也不远了,于是开始正式做仿qq项目。
在后来的日子里,我对这个项目进行不断地改进和拓展,终于完成了基础聊天业务,并添加了附加的高级功能。
项目迭代历程大致如下:
- 聊天文字堆砌
- 添加气泡,完成简易聊天室
- 添加登录注册窗口
- 添加主窗口
- 通信框架升级
- 数据库优化升级
- 添加群聊天
- 添加群资料
- 添加远程桌面
- 添加语音消息
- 添加音视频通话
下面谈谈令我印象深刻的几段经历,每每回忆起,不胜感动。。。。。。
刻骨铭心回忆录:
-
swing美化:为改变java swing中固有的丑陋界面,又特地上网学习了关于swing的美化,并结合自己 实践不断地改进才得到现在这样比较满意的效果。
-
通信框架: 从一开始的java序列化到后来为了降低码流而改用netty框架,又进行了一次新的摸索和尝试,又来了一个地毯式的“更新迭代”。
-
截屏: 为了实现截屏效果,特地从网上找来教程,不过功能很朴素,只提供了基本的截屏功能,作为完美主义的我岂能容忍,于是又是几天的探索才做的功能相对的齐全,又长舒了一口气。
-
背景修改: 再然后就是对背景的修改,又想能改背景图,又想能改背景色,又要保存背景配置,又经历了一番长久地探索。
-
群资料: 私聊做完之后做群聊,群聊做完之后又做群资料,其中诸如群首页,群相册,群文件,群成员,群公告这些又是一轮烧脑。
-
文件发送: 为了降低服务器带宽,提高传输速率,我采用了p2p打洞技术,还是tcp打洞,在众人都说tcp打洞不可能实现的情况下硬是凭着坚韧摸索了出来,想到这里又是一把鼻涕泪。
-
远程桌面: 从一开始的简单传输指令与图像,到最后的反复测试优化,不断缩减延迟,提升体验,才 达到了与qq远程桌面相接近的远程效果,当然主要得益于算法方面的优化。
-
视频通话: 从一开始选择JMF框架,再到放弃JMF选择javacv, 再到选择jmf, 再到怀疑jmf, 再到选择jmf框架辅之以udp打洞才突破了技术壁垒。
-
服务器方面: 从一开始直接实例调用connetion对象,到后来为提升性能改用c3p0数据库缓存池,又是一轮辛苦的“劳动”。
以上每一次都是举步维艰,其中艰辛,不言自明,最后,在经历9个月的探索开发和迭代,才终于完成,实属不易啊。
下面,来几张效果图给大伙看看吧
远程桌面效果图:
视频通话效果图:
然后,懒得码字,也懒得重新做图了,就从其他地方找来张图详细的介绍下项目实现的功能吧:
源代码下载地址: https://ke.qq.com/course/2737465?tuin=c1e74cdc
qq交流群:679578626