java仿qq思路_java仿QQ聊天软件OIM艰辛之路(开源项目)

既然QQ能仿ICQ, 咱java也来个仿QQ.

在我刚学完java后,就想做点什么项目锻炼下自己的技能。凑巧的是,我一个同样学java的朋友在做一个仿qq的项目,不过他做的实在太丑了。

然后他想让我也一块做这个,我心想,像qq这么高难度的项目肯定复杂得要死,所以我是想都不敢想的。

没想到后来的偶然的一天,我手痒了,想用java做一个简单的聊天室。然后说做就做,着手开干,不一会,凭着对java和通信的有些基础的掌握,写出了一个简陋的聊天室。简陋到粗糙的地步,粗糙到只有聊天的文字一行一行的堆砌在面板上,早期效果截图没保存,不过大家凭着自己的想象力也不难脑补。

后来,我想,要是能给加个气泡就好看多了,于是,开始上网查资料,奈何,资料撩撩几笔,而又残缺不全,只能从有限的资料里找些蛛丝马迹,网上找来的知识零零散散,再凭着自己的理解进行简单拼凑之后,又开始上手开发。

在经过了数个日日夜夜之后,终于搞成了,下面来一张**早期的**效果图给大家看看:1f85117d13e19169c6b5eab576f2a219.png

当然,这个时候还只有一个聊天窗口,登录窗口和主窗口都没有,可以说是简易版的聊天软件了。

在做完这个之后,我成就感爆棚,顿时自己又飘了,想着这个能做完,离qq也不远了,于是开始正式做仿qq项目。

在后来的日子里,我对这个项目进行不断地改进和拓展,终于完成了基础聊天业务,并添加了附加的高级功能。

项目迭代历程大致如下:聊天文字堆砌

添加气泡,完成简易聊天室

添加登录注册窗口

添加主窗口

通信框架升级

数据库优化升级

添加群聊天

添加群资料

添加远程桌面

添加语音消息

添加音视频通话

下面谈谈令我印象深刻的几段经历,每每回忆起,不胜感动。。。。。。

刻骨铭心回忆录:swing美化:为改变java swing中固有的丑陋界面,又特地上网学习了关于swing的美化,并结合自己 实践不断地改进才得到现在这样比较满意的效果。

通信框架: 从一开始的java序列化到后来为了降低码流而改用netty框架,又进行了一次新的摸索和尝试,又来了一个地毯式的“更新迭代”。

截屏: 为了实现截屏效果,特地从网上找来教程,不过功能很朴素,只提供了基本的截屏功能,作为完美主义的我岂能容忍,于是又是几天的探索才做的功能相对的齐全,又长舒了一口气。

背景修改: 再然后就是对背景的修改,又想能改背景图,又想能改背景色,又要保存背景配置,又经历了一番长久地探索。

群资料: 私聊做完之后做群聊,群聊做完之后又做群资料,其中诸如群首页,群相册,群文件,群成员,群公告这些又是一轮烧脑。

文件发送: 为了降低服务器带宽,提高传输速率,我采用了p2p打洞技术,还是tcp打洞,在众人都说tcp打洞不可能实现的情况下硬是凭着坚韧摸索了出来,想到这里又是一把鼻涕泪。

远程桌面: 从一开始的简单传输指令与图像,到最后的反复测试优化,不断缩减延迟,提升体验,才 达到了与qq远程桌面相接近的远程效果,当然主要得益于算法方面的优化。

视频通话: 从一开始选择JMF框架,再到放弃JMF选择javacv, 再到选择jmf, 再到怀疑jmf, 再到选择jmf框架辅之以udp打洞才突破了技术壁垒。

服务器方面: 从一开始直接实例调用connetion对象,到后来为提升性能改用c3p0数据库缓存池,又是一轮辛苦的“劳动”。

以上每一次都是举步维艰,其中艰辛,不言自明,最后,在经历9个月的探索开发和迭代,才终于完成,实属不易啊。

下面,来几张效果图给大伙看看吧041312ffe8608ff0ab5d696d1f43ce07.png

47c2735bdb6f96f7121f4d9c931a7d98.png

远程桌面效果图:734dafb0630fd1528189240acc9398f7.png

视频通话效果图:3da06f85696b6ebb408d5a31f8651b1f.png

然后,懒得码字,也懒得重新做图了,就从其他地方找来张图详细的介绍下项目实现的功能吧:

10d4f46b72568733a8210c06626798eb.png

最后,这个仿qq项目已经开源,小伙伴不再需要花费积分下载了,在此贡献给对java仿qq感兴趣的你。

gitee下载地址:https://gitee.com/asddgasg/java_qq_oim

欢迎加入qq交流群一起学习讨论:679578626

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值