微信QQ已经成为我们的必备的社交应用,如何去做一款这样的产品,我们去揭开他们的面纱。下图是讨论一个仿QQ项目源码的几个点。
- 演示:目前已经完成的部分界面,效果图如下(真实拷贝自项目运行效果图,而非QQ截图):
1.1登录界面
1.2注册界面
1.3主界面
1.4聊天界面
2.源码获取
直接在公号编码前线回复“qq源代码”即可拿到源代码,分服务端代码和客户端代码两个部分
3.技术点
这个项目主要用到的技术:
-
Netty,通信网关、负责消息的上传下发
-
JavaFx,gui界面
-
spring,作为IOC容器
-
MyBatics,作为持久化方案
4.发消息的秘密
4.1.原理(需要掌握netty的通道概念):用户登录后记录session,包含通道channel和用户信息user,并记录到SessionManager,SessionManager主要记录了用户id和session的映射关系,当用户A登录后,要向好友用户B(有好友用户ID)发送消息,在SessionManager通过用户B的id拿到用户B的Session,进而拿到用户B的通道channel,通过通道就可以向B发送消息了;如果用户B不在线,存储要发送的消息,用户B登录后再去拉发给用户B的所有离线消息。
4.2.优化方向:
4.2.1如何确保用户A向用户B发送的n条消息,B接收到的顺序与A发送的顺序一致,而且不重不漏,即消息的时序性和一致性。
4.2.2当用户A和用户B登录后不在同一台服务器,怎么发送消息,可以考虑把用户ID和session的对应关系放到Redis等多服务器共用的存储中心,且尽量让有聊天交集的用户在同一个服务器登录。
4.2.3用户的心跳和重连机制
网友评论