Messenger · IM即时通讯

首页/新闻列表/文章详情

即时通讯开发,社交软件开发实战,哎哟团队解析。

发表时间:2022-10-13 11:35:24    浏览次数:900

聊天软件实战:即时通讯,1v1聊天,社交软件,即时通讯源码

存储

现在,我们已经准备好了服务器,服务正在运行,第三方集成已经完成。在技术层的深处是数据层。数据层通常需要一些努力才能使其正确。我们必须做出的一个重要决定是选择正确的数据库类型:关系数据库还是NoSQL数据库?为了做出明智的决定,我们将检查数据类型和读/写模式。

典型的聊天系统中存在两种类型的数据。第一种是通用数据,例如用户配置文件、设置、用户好友列表。这些数据存储在健壮可靠的关系数据库中。复制和分片是满足可用性和可伸缩性要求的常用技术。

第二个是聊天系统特有的:聊天历史数据。理解读/写模式很重要。

•聊天系统的数据量巨大。此前的一项研究[2]显示,Facebook messenger和Whatsapp每天处理600亿条消息。

•只经常访问最近的聊天。用户通常不会查找旧聊天记录。

•尽管在大多数情况下都会查看最近的聊天记录,但用户可能会使用需要随机访问数据的功能,如搜索、查看您的提及、跳转到特定消息等。数据访问层应支持这些情况。

•1对1聊天应用的读写比约为1:1。

选择支持我们所有用例的正确存储系统至关重要。出于以下原因,我们推荐键值存储:

•键值存储允许轻松水平缩放。

•键值存储提供非常低的数据访问延迟。

•关系数据库不能很好地处理长尾[3]数据。当索引变大时,随机访问的代价很高。

•键值存储被其他经验证的可靠聊天应用程序采用。例如,Facebook messenger和Discord都使用键值存储。Facebook messenger使用HBase[4],Discord使用Cassandra[5]。

数据模型

刚才,我们讨论了使用键值存储作为存储层。最重要的数据是消息数据。让我们仔细看看。

1对1聊天的消息表

图12-9显示了1对1聊天的消息表。主键是message_id,它有助于确定消息顺序。我们不能依靠created_at来决定消息序列,因为可以同时创建两条消息。

1 系统需求分析

1.1 产品非功能需求

1.1.1 用户需求

系统的设计建立在用户的需求之上,通过对用户需求的分析,可以更好的实现系统,明确系统的设计方向。


随着互联网的不断发展,人与人之间的交流也逐渐开始越来越依赖网络,在这种形势下,我们开发出了这款即时通信系统。本着用户至上的原则,我们对用户需求进行了分析调研。结果显示,用户除了对基本的通信功能的要求外,还希望能够拥有个性化的展示,同时希望能和好友进行更多的交互。基于用户的需求,我们将软件的功能大致划分为:通信,文件传送,界面展示,天气预报等。


1.1.2 易用性需求

本产品采用javafx技术,为用户设计了简单易用的界面,同时使用css对界面进行了美化,为用户提供了良好的使用界面。在使用过程中如果用户误操作也会对用户进行相应的提示。


1.1.3 性能需求

本产品在保持界面的美观的同时为优化性能设计了具体的算法,尽量为用户提供及时的响应。


1.1.4 可维护性和可扩展性需求

本产品使用Java作为主要的开发语言,在设计的时候使用了很多Java经典的设计模式,例如:观察者模式,装饰器模式,适配器模式,单例模式,中介者模式等。这些经典的设计模式的使用极大的提高了程序的可维护性,在设计数据库表时也充分考虑了程序将来的扩展。


1.1.5 安全性需求

本产品在设计时采用正则表达式对用户输入进行过滤,同时使用了较为可靠的sql连接、查询方式。为了避免用户破坏数据库,对数据库的连接信息写入到了xml配置文件当中。


1.2 产品功能需求

1.2.1 登录功能

用户在输入账号后,客户端向服务端发送请求完成以下两个功能:


(1)如果账号正确则先从数据库中取出该账号对应的用户头像并将其显示在指定的位置。


(2)如果账号信息不正确,则头像为默认头像。


(3)点击登录,如果账号和密码都正确则进入主界面,如果其中有一项错误则直接弹出提示框,提示错误。


1.2.2 注册功能

注册功能允许用户通过网页注册相应的账号,注册时可以对个人基本信息进行填写,注册成功后将用户信息添加进数据库中。


1.2.3 添加好友功能

添加好友功能允许用户向好友发出好友申请,好友申请具有以下功能:


(1)向好友发出好友申请信息。


(2)当收到好友的好友申请时,可以在界面中显示好友申请信息,包括申请者的昵称等,并可以将好友加入任意的分组中。


(3)同意添加好友后,列表即可更新,新添加的好友就会显示在好友列表相应的分组中。同时好友在添加好友后列表也会进行相应的更新。


(4)可以在网络上查找好友,如果好友存在则显示好友的昵称和头像,如果输入的账号不符合规定会有相应的提示,如果不存在也会有对用的提示信息。


1.2.4 好友上线提示功能

主界面初始化时,好友列表中不在线的好友头像为灰色,同时点击头像无法进入聊天界面,但是可以查看好友信息。当有好友上线时,灰色头像的好友就会自动变换状态,颜色也会变为彩色。


1.2.5 天气预报功能

天气预报功能提供给用户一天内的天气情况,功能包括:


(1)根据天气情况显示相应的天气图案。


(2)鼠标悬停在天气图案上时可以出现具体的天气信息,包括温度,风向,穿衣指数,穿衣建议等。


1.2.6 删除好友功能

在好友列表中选中要删除的好友,点击鼠标右键,在弹出的菜单中点击删除好友即可将好友从好友列表中删除,同时好友信息也将从数据库中被删除。


1.2.7 黑名单功能

在好友列表中选中要加入黑名单的好友,点击鼠标右键,在弹出的菜单中点击加入黑名单,即可将好友从好友列表原先的分组中移入黑名单,同时好友信息也将从数据库中被修改。如果列表中没有黑名单分组,系统会自动创建黑名单分组。


1.2.8 查看个人信息功能

点击主界面中显示的头像即可进入个人信息查看界面,在个人信息界面中,有以下几个功能:


(1)个性背景展示。


(2)点击随机切换个性背景。


(3)个人详细信息展示。


(4)照片墙功能。


1.2.9 修改个人信息功能

进入个人信息界面后可以在右侧第一行看到编辑信息几个蓝色的字,点击即可进入个人信息编辑界面。修改个人信息功能提供给用户修改基本的个人信息的权利。在个人信息编辑界面,用户既可以对单个个人信息进行修改,也可以对多个个人信息进行修改。信息修改后数据库中相应的信息也会被修改。


1.2.10 查看好友基本信息功能

在好友列表中选中要查看个人信息的好友,右键点击即可弹出菜单,在菜单中点击查看好友信息即可进入好友信息查看界面。该界面展示了好友的基本信息,以及个性背景和照片墙等。


1.2.11 单聊功能

点击在线好友进入聊天界面即可开始一对一聊天,同时可以支持一对多聊天功能,即一个人同时和多个人进行聊天。单聊界面中可以展示自己的qq秀。


1.2.12 群聊功能

点击列表中的群组即可进入群组并开始和其它在同一群组的用户聊天。同时鼠标悬停在群组头像上可以展示群关系,群基本信息。群聊界面中也会展示群组中的用户以及个人的qq秀。


1.2.13 文字聊天功能

即时通信系统支持文字聊天功能,同时可以根据需求选择个性化的字体样式包括:字体大小、字体颜色、字体类型、粗体、斜体等。但是需要注意的是,由于系统限制,中文字体无法展示斜体样式。


1.2.14 图片聊天功能

在聊天过程中可以选择本地图片发送给好友,但是图片大小经过算法处理会被压缩。


1.2.15 图片查看器功能

由于图片在传输过程中会被压缩,因此在即使通信系统中简单实现了一个图片查看器,在接收到图片后双击图片即可打开图片查看器,图片查看器主要包括以下几个功能:


(1)将图片放大。


(2)将图片缩小。


(3)旋转图片。


1.2.16 文件传输功能

用户可以选择本机的文件发送给好友,好友在接收到文件后可以选则接受文件,好友在点击接受文件后,进度条开始运行,文件下载完成后会出现相应的提示。由于使用的是单线程实现,所以整体的下载速度并不理想。


2 系统设计

2.1 可行性分析

2.1.1 调查分析

系统的初步调查是系统设计的规划阶段的第一项活动,也是整个系统开发的第一项活动,主要目标就是了解组织机构、工作现状。


通过对整个即时通信系统业务的了解,主要业务逻辑是用户的各种操作,用户的操作经由服务器进行处理,服务器根据事先约定的通信协议对用户的各种请求进行相应的处理,然后将处理结果转发给相应的用户(包括自身)。用户的操作主要有以下几点


(1)登录。


(2)注册。


(3)聊天。


(4)发送文件、图片。


(5)添加好友、好友申请。


(6)对好友的各种操作。


(7)对自己信息的各种操作。


(8)好友以及本人对信息的展示。


(9)查看图片等信息。


总之,必须对现行系统进行详尽调查,明确用户需求,保证开发的新系统的功能与用户的要求相吻合,避免耗费大量的人力、物力、财力。