去年我们公司要我去面试一位候选人,当时刚好我接手了公司的 IM 系统,借这个机会,就问了候选人这个问题:如何快速开发一个类似微信的聊天系统?

这个问题的确让候选人回答起来很吃力:

  1. 从分析 PC 端微信界面的实现到怎么处理框体也业务代码分离;

  2. 从通信模型定义到怎么处理消息协议、半包粘包到流量整型;

  3. 从架构模式设计到怎么合理的搭建出完善且易于扩展的模块。

等等问题点的抛出和解答,候选人也确实用心在思考。但我知道因为这里有些技术栈和通信架构设计的缺失,使得解答这些问题变得很艰难。

恰好那段时间我刚写完 36 篇 Netty 系列教程,看似系统,但是回顾起来还是零散。看完后,一些读者反馈无法上手真实业务,问我能否写一写 Netty 在实际业务中的应用。为了让大家更好的理解,我决定采用一个大多数人熟知又有趣的场景:模仿 PC 端的微信聊天。对于学习者来说,这样不仅学习到了 Netty,还帮 Java 程序员使用自己的语言技术栈,开发出一款桌面聊天程序!

最原始的 36 篇 Netty 文章

Netty 是互联网各种框架中以及物联网里都不可缺少的一部分技术栈技能,同时它也是非常重要的一个 Socket 框架。Netty 的应用非常广泛,无论在互联网、大数据以及通信和游戏行业中,都有 Netty 的身影。比如一线大厂阿里的 RPC 框架,Dubbo 协议默认使用 Netty 作为基础通信组件,用于各节点间的内部通信。

淘宝的消息中间件 RocketMQ 的消息生产者与消费者,也是采用 Netty 作为高性能、异步通信组件。除了阿里系、淘宝系,其他很多一线大厂也都在使用 Netty 构建高性能、分布式的网络服务。

掌握一个技能最好的方式就是使用自己熟悉的工具进行实践落地,通过功能的一点点实现和逻辑的大量阅读,建设自己对代码的认知,并深化对整个框架的理解。

一个新知识点从学习到上手,往往分为三个阶段;运行 HelloWord、熟练使用 API、和最终的落地应用。而这最后一步也是最重要的一步,要将各个知识点与实际要实现的业务功能相结合,才能不断提升自己的技能。

为此我开始使用 Netty+JavaFx 以及 SpringBoot 等技术栈,搭建仿桌面版微信聊天程序,并在这个过程中梳理分析功能结构。这个过程可以使用 xmind 作为你的工具,整理自己的思路。接下来我对需要使用的技术栈做案例测试,验证核心功能是否可以满足我的需求。验证完成后,开始做架构设计以及业务流程,直到最终通过编码实现功能。

这个专栏是我使用 JavaFxNetty4.xSpringBootMysql 等技术栈和偏向于 DDD 领域驱动设计方式,搭建的仿桌面版微信聊天工程实现通信核心功能。

本专栏会以三个大章节内容,逐步进行讲解:

第一部分 - UI 开发:使用 JavaFx 与 Maven 搭建 UI 桌面工程,逐步讲解登录框体、聊天框体、对话框、好友栏等各项 UI 展示及操作事件。从而在这一章节中让 Java 程序员学会开发桌面版应用;

第二部分 - 架构设计:在这一部分中我们会使用 DDD 领域驱动设计的四层模型结构与 Netty 结合使用,架构出合理的分层框架。同时还有相应库表功能的设计。相信这些内容学习后,你一定也可以假设出更好的框架;

第三部分 - 功能实现:这部分我们主要将通信中的各项功能逐步实现,包括;登录、添加好友、对话通知、消息发送、断线重连等各项功能。最终完成整个项目的开发,同时也可以让你从实践中学会技能。

界面效果展示

功能演示图

登陆页面

聊天页面

添加好友

消息提醒

多图解析

通过这个专栏,可以获得什么?

  • 以 DDD 领域驱动设计的分层模型结合 Netty,编写清晰简洁可扩展的框架结构,完成仿微信聊天核心功能项目开发。

  • 使用 JavaFX 做 UI 窗体并且与业务代码分离的方式实现桌面版程序功能。在事件驱动与接口调用的方式中,使代码更加清晰、更加易于扩展。

  • 清晰的设计,明确到位的落地,让理论与实践结合起来。快速上手掌握 Netty、JavaFx、架构、库表的设计与编码。


即日起至 3 月 17 日,《Netty + JavaFx 实战:仿桌面版微信聊天》限时特惠!现在订阅专栏,小傅哥带你实践桌面版微信核心功能,巩固 Netty 技术栈!

订阅专栏,即可进群与作者交流

面试官问:如何快速开发一个类似微信的聊天系统?相关推荐

  1. 面试官问:来实现一个Promise

    大家好,我是若川.最近组织了源码共读活动<1个月,200+人,一起读了4周源码>,已经有超50+人提交了笔记,群里已经有超1500人,感兴趣的可以点此链接扫码加我微信 ruochuan12 ...

  2. 【JS面试题】面试官问我:遍历一个数组用 for 和 forEach 哪个更快?

    赶快悄悄的努力起来吧,不苒在这里衷心祝愿各位大佬都能顺利通过面试. 面试专栏分享,感觉有用的小伙伴可以点个订阅,不定时更新相关面试题:面试专栏 . 文章目录 ⭐ 前言

  3. 【154期】面试官问:请你说说 B 树、B+ 树的原理及区别?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方留言必回,有问必答! 每天 08:35 更新文章,每天进步一点点... 之前在 ...

  4. 被面试官问懵:TCP 四次挥手收到乱序的 FIN 包会如何处理?

    摘要:收到个读者的问题,他在面试的时候,被搞懵了,因为面试官问了他这么一个网络问题. 本文分享自华为云社区<TCP 四次挥手收到乱序的 FIN 包会如何处理?>,作者:小林coding . ...

  5. 【159期】面试官问:说说 MongoDB 批量操作与 MySQL 效率对比?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方留言必回,有问必答! 每天 08:35 更新文章,每天进步一点点... 本文主 ...

  6. 面试官问我:一个 TCP 连接可以发多少个 HTTP 请求?我竟然回答不上来...

    点击上方"方志朋",选择"设为星标" 做积极的人,而不是积极废人 作者 | 松若章 来源 | https://zhuanlan.zhihu.com/p/6142 ...

  7. 【263期】面试官问:假设有一千万数据,怎么快速查询?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每一天进步一点点,是成功的开始... 前言 面试 ...

  8. redis怎么修改_面试官问我Redis事务,还问我有哪些实现方式

    ❝ 「第12期」 距离大叔的80期小目标还有68期,今天大叔要跟大家分享的内容是 -- Reids中的事务.同样,这也是redis中重要指数为四颗星的必备基础知识点.下面一起来了解一下吧. ❞ 相信大 ...

  9. 【283期】面试官问:高并发场景下,如何保证全局唯一分布式 ID 生成?

    点击上方"Java精选",选择"设为星标" 别问别人为什么,多问自己凭什么! 下方有惊喜,留言必回,有问必答! 每一天进步一点点,是成功的开始... 前言 系统 ...

最新文章

  1. win 常用网络命令
  2. 从一个数组中提取出第start位到第end位
  3. Burrow 服务的安装部署
  4. OD消息断点的设置方法
  5. Saltstack_使用指南17_salt-ssh
  6. adb——Android的ADB工具使用
  7. 2019 徐州icpc网络赛 E. XKC's basketball team
  8. 递归法:走楼梯; 旋转数组的最小数字(递归法和改进二分法)
  9. [转载] python格式化字符串漏洞_从两道CTF实例看python格式化字符串漏洞
  10. YOLO-V3可视化
  11. 伴随矩阵例题_伴随矩阵习题及解答
  12. 标准盒模型和IE盒模型
  13. 系统集成项目经理申报
  14. 系统管理之Systemd详解(centos7)
  15. js中text方法是啥意识_JS中Text节点总结
  16. LTV预估与留存曲线拟合:指数函数还是幂函数?
  17. 华为和英国电信正式签署“21世纪网络”合同
  18. 最新王了个王H5游戏源码+三消游戏/带后台版本
  19. 微星B550M迫击炮WiFi板第二条M2固态(M2_2接口)不识别问题
  20. 在Asset Store上购买unity插件

热门文章

  1. 【WLAN】【基础知识】WIFI那些事儿之BandSteering
  2. android usb设置在哪,手机usb调试在哪,小编教你安卓手机怎么打开USB调试
  3. Problem : STL——水果店
  4. cnpm显示成功安装后cnpm不是内部命令的解决办法
  5. cnpm命令安装,不是内部命令解决方案。
  6. JAVA 10.4 工资管理软件设计 TUT实验二
  7. Find X 7月13日开售 OPPO将打破行业沉寂“全面升阶”
  8. JS匿名函数Uncaught TypeError: x is not a function
  9. 区块链保护玩家虚拟财产
  10. Hive究竟是什么?大白话讲述