小傅哥
博客 bugstack.cn - 汇总所有文章 | 一线互联网软件开发工程师,擅长编写优秀的代码、中间件开发、架构设计等。| 公众号:bugstack虫洞栈,回复:设计模式、面经手册、字节码编程,可以下载我的PDF!
展开
-
专栏学习简述以及全套源码获取
一、前言本专栏是作者小傅哥使用JavaFx、Netty4.x、SpringBoot、Mysql等技术栈和偏向于DDD领域驱动设计方式,搭建的仿桌面版微信聊天工程实现通信核心功能。在接下来的章节里会一步步来带着大家从UI到功能逐项实现。在后续的专栏内容的讲解中,会有很多涉及到代码的地方,可以先进行下载源码对照学习。二、功能 登陆页面 聊天页面 添加好友 消息...原创 2020-09-22 12:09:38 · 3833 阅读 · 0 评论 -
PC 端微信页面拆分及 JavaFx 使用
一、前言对于一个知识点的学习过程来说,往往使用自己熟悉的工具或方式才更易于上手。因为所有同类型的知识点在抛出复杂的流程拨云见日后,所能得到的几乎都是同样的设计思想和实现理论。在 Java 语言桌面版开发中,直至目前共提供了三套 UI 开发方式;Awt、Swing、JavaFx,以及一些扩展组件 SWT 等。在这三套 UI 组件中,JavaFx 是最新也是最为好用的,因为他提供了丰富的功能,以及...原创 2020-09-22 12:09:36 · 3079 阅读 · 0 评论 -
登陆框体实现:结构定义、输入框和登陆
一、前言从本章节开始我们会陆续实现各个框体的 UI 开发,内容会包括;框体拆解、工程结构、代码开发,以及最后编写事件和接口。在 JavaFx 中,一个框体包含;窗口 (Stage)、场景(Scene)、布局(Pane)、控件(Button 等) 这四方面内容。而开发过程中可以使用 xml 和编码两种方式进行处理,一般一些预定好的会使用 xml 结构,如果是随着我们业务行为触达而产生的会开发到代...原创 2020-09-22 12:09:34 · 2757 阅读 · 0 评论 -
登陆框体事件与接口
一、前言在上一章节中我们把登陆窗体开发完成了,并进行了效果演示。那么接下来我们就需要在这个窗体里面添加行为事件和接口,待完成内容如下;序号类型描述1事件鼠标拖拽窗体移动2事件最小化到快捷栏3事件退出当前窗体4事件使用用户 ID 和密码登陆5接口登陆成功,执行跳转操作6接口登陆失败,执行提示操作在桌面版程序开发中...原创 2020-09-22 12:09:33 · 1988 阅读 · 0 评论 -
聊天框体实现:整体结构定义、侧边栏
一、前言在前面章节我们实现了登陆窗体开发以及窗体需要的事件和接口,最终我们演示了运行效果。从上面简单的例子,我们可以学一个简单窗体的开发和框架结构的定义。那么接下来我们开始开发聊天窗体,相对于登陆窗体来说,聊天窗体的内容会比较多,同时也会相对复杂一些。因此我们会分章节的逐步来实现这些窗体以及事件和接口功能。在本篇文章中我们会主要讲解聊天框体的搭建以及侧边栏 UI 开发。二、框体分析为了更加...原创 2020-09-22 12:09:31 · 2285 阅读 · 0 评论 -
聊天框体实现:对话框
一、前言本章节我们来实现仿微信聊天对话框部分,对话框的功能是将与某个好友或者群组聊天的集合体现。如果你还记得以前的 QQ,那时候与任何一个好友或者群组通信,都是单独打开的窗体,需要在各个窗体间切换聊天。不过那时候大部分人的即时通信的好友并不多,所以也很适合。但是随着后来移动互联网的发展,也推进桌面版聊天软件的优化。那么本章节我们就来实现这部分对话框的窗体实现。在你还没有往下看的时候,可以思考下...原创 2020-09-22 12:09:30 · 2293 阅读 · 0 评论 -
聊天框体实现:对话聊天框
一、前言在上一章节我们实现了对话框体的 UI 部分,可以选中对话好友并可以删除操作。那么接下来我开始实现对话框选中后的内容区域展现,也就是用户之间信息发送和展现。从整体上看这是一个联动的过程,点击左侧的对话框用户,右侧就有相应内容的填充。那么右侧被填充对话列表 ListView 需要与每一个对话用户关联,点击聊天用户的时候,是通过反复切换填充的过程。在没有实现这部分功能之前,你也可以先主动思考下...原创 2020-09-22 12:09:28 · 2961 阅读 · 0 评论 -
聊天框体实现:好友栏
一、前言截至到本章节我们将聊天框体中的主页面 UI 内容实现完成,可以展示对话列表、选中模拟发送消息、删除对话框等功能。那么接下来我们将开发 好友 页的 UI,目前这一部分还是一个块空白的白板,我们需要在里面首先开发好友列表的功能。大家都经常使用 PC 端的微信,可以知道在好友栏里是分了几段内容的,其中包含;新的朋友、公众号、群组和最下面的好友。那么这样的 UI 结构你是否有所思考该如何开发吗?...原创 2020-09-22 12:09:26 · 1885 阅读 · 0 评论 -
聊天框体实现:好友填充框
一、前言这一章节里我们需要实现的是将好友栏中四个内容;“新的朋友”、“公众号”、“群组”、“好友”,添加完善相应的功能。如下;在“新的朋友”里添加好友搜索和添加的功能。因为我们实现的 PC 端微信,是没有手机端的,所以我们需要在这里添加好友搜索功能。如果你开发的是企业聊天软件,那么这里的好友就是你的企业组织关系。在“公众号”里添加一个公众号的展示。因为这部分不是我们主要实现的功能,所以只做...原创 2020-09-22 12:09:25 · 1724 阅读 · 0 评论 -
聊天框体事件定义
一、前言在桌面版 UI 开发中,为了能使 UI 与业务逻辑隔离,需要在我们把 UI 打包后提供出操作界面的展示效果的接口以及界面操作事件抽象类。那么可以按照下图理解; 从示意图中可以看到,我们可以通过一些列提供出的接口,来操作 UI 效果的展示。之后是每一个 UI 里的行为操作都会产生相应那么的事件,那么我们可以在 UI 中定义抽象类,并由外部来实现这些类最终交给 UI,这样就可以做到...原创 2020-09-22 12:09:23 · 1717 阅读 · 0 评论 -
练习篇:聊天表情框体实现
一、前言结合我们已经学习开发了JavaFx的很多功能,这里设置一个练习题锻炼下对框体的功能实现。二、练习题本章节的练习题是:在聊天窗体中开发默认表情框功能,如下图; 三、思路按照我们的UI架构模型,可以思考下开发这样一个表情弹出层都需要哪些方面的代码类。因为是两个界面之间的交互,那么你是需要到JavaFx的模态窗口功能。可以主动搜索这样的实现方法。另外表情内容的下载这里提供...原创 2020-09-22 12:09:22 · 1567 阅读 · 0 评论 -
解答篇:聊天表情框体实现
一、前言在上一章节我们设定一个练习题,“聊天表情框体”的实现。那么在没有继续往下看之前你是否有实现了自己的框体效果呢?或者思考到了哪些点,实现了多少功能以及遇到了什么样的问题。现在可以带着你的问题继续往下看,这里我会提供一种实现方式。当然,如果你实现了自己的效果可以在留言区回复哦!二、工程结构itstack-naive-chat-ui└── src ├── main │ ...原创 2020-09-22 12:09:20 · 1606 阅读 · 0 评论 -
服务端架构设计
一、前言可能有些同学一听到架构会感觉到有些“高大上”,或者以为这些东西有些神秘。当然如果是刚刚接触开发没多久,或者刚工作只是参与业务需求的实现,并没有从整体看待全局。那么是有可能对这些架构的字眼有些发蒙。其实从简单来说,哪怕是你最开始练习做作业的 CRUD,其实它也是一种建构模式。只不过在这个架构的世界里有一个叫更适合的词,只有适合你业务的才是更好的架构。不一定非得把你仅仅是一个非常小的几十人访...原创 2020-09-22 12:09:18 · 2548 阅读 · 0 评论 -
通信协议包定义
一、前言有些小伙伴,可能刚开始接触 Netty 通信,并不一定能理解为什么要做通信协议包的定义。那么你是否接触过 RPC 框架,比如说使用过 Dubbo 做一些分布式的接口,那么这个时候是需要将提供接口的一端,提供一个 jar 包,这个 jar 包就是接口信息的描述性文件。好 !不管你是否接触过或者学习过。为了能让小伙伴们更清晰的了解定义通信协议包,同时也让没怎么接触过 Netty 的伙伴了解...原创 2020-09-22 12:09:16 · 2232 阅读 · 0 评论 -
客户端架构设计
一、前言在设计客户端的架构之前,我们先思考下我们的目标以及目前已经完成的内容。好!那么你是否还能记得我们最开始设计 UI 组件包的时候,就已经反复提到要将我们的 UI 与业务进行分离,不要将业务流程代码写到 UI 窗口里去。否则你的代码将越来越难以为维护,每新增加一个功能都将会让你从很多的代码中“贴膏药”似的补来补去。UI 方面:我们已经完成了 UI 包的开发,并使用 Maven 进行打包对外...原创 2020-09-22 12:09:15 · 2540 阅读 · 0 评论 -
数据库表结构设计
一、前言 MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL 是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL 是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。阅读到这篇文章的小伙伴,或多或少都是使用过关系型数据库的...原创 2020-09-22 12:09:13 · 2496 阅读 · 0 评论 -
登录功能实现
一、前言介绍在前面我们已经完成;UI 界面开发、服务端架构设计、客户端架构设计、库表设计。那么接下来从本节开始,陆续实现我们的通信核心功能。在讲解的过程中我会在章节中提供简要明了的系统流程图,以及代码核心功能的实现。这也是我们逐步使用 DDD 四层设计模式与 Netty 结合的实践。二、流程设计首先是用户在窗体中发起登录事件并由客户端向服务端发送登录请求。之后服务端验证后,再将验证结...原创 2020-09-22 12:09:12 · 2139 阅读 · 0 评论 -
搜索和添加好友
一、前言介绍在上一章节我们实现了用户登录到成功后跳转到主窗体聊天中,而目前跳转后我们还不能发起 聊天,因为目前我们的个人用户还没有自己的好友。那么接下来我们来实现搜索和添加好友功能,因为在微信中是可以从手机端扫描或者通信录进行添加好友。但是我们目前只有 PC 端所以需要在服务端来搜索添加。在实现功能之前,可以先回顾下我们进行库表设计的时候有一张用户表,那么可以在搜索的时候从这里搜索好友信息,搜...原创 2020-09-22 12:09:10 · 1925 阅读 · 0 评论 -
对话通知与应答
一、前言在我们使用微信的时候都会看到有一个聊天发送信息的地方左面是“好友栏”,但是这个好友栏可不是你的所有好友,而是与谁对话了才会在这里看到好友信息,我们称之为这个为对话框列表。这让我想起最开始我爸爸妈妈使用微信的时候,经常会说我好友咋找不到了,头几天还跟我说话了呢。而且也不敢删这里面的记录,后来就越来越卡越来越卡。不过现在是玩明白了,还熟的很!那么,从产品流程角度看,这个好友栏是怎么有的数据...原创 2020-09-22 12:09:09 · 1610 阅读 · 0 评论 -
用户与好友通信
一、前言经过我们一系列基础工作的开发,写到这里终于可以要去实现两个用户之间的通信了。可以先想一下我们都做了那些基础工作才到这里;加好友、好友列表、对话通知。是这三大部分的完成,为下一步好友之间的通信打下基础。那么,好友之间的通信基本需要的是,好友需要在线,因为只有这样才能拿到好友的 channel,也就是通信管道。当客户端 A 发送消息到服务端,服务端找到被接收消息的 B 的通信取到,开始将消...原创 2020-09-22 12:09:07 · 1706 阅读 · 0 评论 -
用户与群组通信
一、前言在上一章节我们实现了好友与好友的通信流程,可以简单回忆下我们是从对话框中选择好友进行发送信息。那么我们的对话框中还有一个默认的群组,接下来我们主要实现用户群组的通信。群组通信在 Netty 的实现中,是需要将用户的通信管道 Channel 放到 ChannelGroup 中进行群发消息,这样只要在这个通信管道组里的用户都可以收到消息。接下来我们实现具体的逻辑功能。我们的群组目前是一个...原创 2020-09-22 12:09:06 · 1802 阅读 · 0 评论 -
断线重连恢复通信
一、前言在我们日常使用聊天软件进行通信的时候,可能有时候会由于我们的网络环境问题而导致没有网可用,也就是暂时性的断网。那么此时你的聊天软件发送信息,就不能被接收到了。但是当网络恢复后,我们的聊天就又可以继续了。在这里有一个非常重要的保持通信的手段,就是断线重连。以此来保证在网络以及以其他原因导致断线后,可以在网络恢复后,通信也可以随时恢复。如果,没有这样的功能,那么你就需要退出登录再重新连接了。...原创 2020-09-22 12:09:04 · 2154 阅读 · 0 评论 -
服务端控制台搭建
一、前言到本章节我们通信的基本功能已经完成,那么接下来我们需要对通信服务做一个管理,例如 Netty 服务的运行状态、用户列表和在线状态以及各种纬度的通信信息查询等等。这些都是服务端控制台的用途,我们可以使用网页版的后台来进行搭建我们的控制台。接下来,我们就开发完善这一个后台的基础功能,有了这样的基础的服务端控制台,小伙伴就可以在里面进行不断的扩展控制功能。二、工程结构itstack-na...原创 2020-09-22 12:09:03 · 1768 阅读 · 0 评论 -
练习篇:聊天表情发送功能实现
一、前言什么是聊天中的灵魂呢?当然是表情了,如果没有表情只是文字,那么你怎么表达自己的不可被束缚的情感呢。二、练习题在UI学习完成后,我们设置了一个练习题,来开发表情框体。那么这一章节我们再加一个练习题,来完成表情的发送。 三、思路微信表情也是分为几种的,有固定表情、自己下载的表情、添加的表情、发送的图片。那么我们在这里实现的固定的表情,就是系统默认的。这里的表情实现起来并不难,...原创 2020-09-22 12:09:01 · 1989 阅读 · 0 评论 -
解答篇:聊天表情发送功能实现
一、前言在上一章节我们设置了这样的一个练习题;“** 聊天表情发送功能实现 **”,那么你是否实现了发送表情呢,还是实现了更加强大的功能。学习的阶段当你已经入门了以后,就需要逐步开始简历自己的思维路径,并去实践。二、流程设计从我们的流程中可以看到,固定表情的发送与我们发送用户信息、群组信息,是一样的。但是这里有一个点需要注意,那就是需要定义消息类型。固定表情的消息类型我们设置为 1,原有...原创 2020-09-22 12:08:59 · 2296 阅读 · 0 评论