QQ消息发送的实现思路模拟(文字+图片相间)

目录

1. 消息发送的实现方法

2. 消息发送思路模拟(用文字思考检测是否可行)

3. 细节优化

4. MySQL数据库varchar类型数据长度范围

5. JDBC操作数据库时千万不要用rs.setString(1,1),而是使用rs.setString(1,"your_ziduan"),这样方便直接删掉没用的字段。如果你对数据表足够自信可以用int,可能查数据库会更快。

6. 重点:项目实现的过程


1. 消息发送的实现方法

(注:QQ是存了大量本地数据的,所以我们的一些细节处理方法需要不一样)

经常复制粘贴的朋友应该知道,QQ的表情包是根据读取特殊编码转换出来的。所以如果想发送文字图片相间的信息,就需要给相应的图片(路径)定一个特殊的编码(如:“ \ue12f ”),之后数据库就存这段  “文字 + 编码 + 文字 + 编码 + 文字 + ......” 。

IO操作时,由于我们需要将文字按照组件(应该叫控件)或布局的方式插到一个HBox或其他布局中。因此我们需要以下数组存储存储每条信息

typeNumber           (int型,存储该消息由几个部分构成,遍历整端消息,检测有多少个“ /"编码"                                   ”和文字)

typeRecord[typeNumber + 1]    (int型数组,记录每个组成的数据类型(typeNumber,1为文字                                                          text外包一个布局,2为图片外包一个布局,统一”插入“存放                                                            到网格布局)

text[255]       (String类型数组,记录每一条读到的消息,每读一条,更新上面的两个数据。内容                           为一段"text")

picture[51]       (String类型数组,记录每一条读到的消息,每读一条,更新上面的两个数据。内                              容为通过JDBC(编码为索引)读取的一个图片路径)

(注:要限制输入的长度,用来计算需要开辟的数组大小,text数组长度最好是与限制长度一致)

之后是整个班级信息的读取,设一个messageNumber记录有多少条消息,并把上面举例的数据全部增加一个维度,用于存储不同的组成消息

2. 消息发送思路模拟(用文字思考检测是否可行)

MySQL数据库存储

一、现在外键只存picture的编码(picture_code)和 message_id。

二、picture表

1. 存picture_id,暂时无用

2. 存picture_code  *图片编码,格式“  /u   / ” 

(注:这里要做一个在数据库MySQL中没有找到相应编码的处理)

3. 存类型 state ,  等于1为系统自带,等于2为用户上传

4. 存用户id (当state = 2时不为空)

(注:1\将所有编码按照picture_id生成,2\抄QQ的编码,个人上传的编码由id+用户名生成,3、随机生成不重复的code,用id区分用户,0是统一的表情包)

SERVER收到更新课程聊天记录的请求

一、读取20条记录,有的存message_id和相应信息,(空的存0和null)。相应信息的type为9,则为图片、文字混合消息,在message_picture表//索引//中找到信息存typeRecord【i】.

二、传//给//更新消息给客户端

CLIENT拿到数据,开始更新

一、遍历message[messageNumber + 1],每次遍历一个执行以下操作

二、遍历typeRecord【i】[typeNumber + 1] ,执行下面两个子操作:

       1. 读一个text[flagT],包装插入一条Box中,flagT++ (先到Text中)

       2. 读一个picture[flagP],包装插入一条Box中,flagT++ (先到imageView)

三、将Box插到提前准备好的VBox完成一条消息的插入

(注:读message[]数组要倒序读取)

3. 细节优化

1. 为了防止数据库IO操作卡顿,我们设置最大显示消息数量,设成20就行,方便演示。因为可以在后续加一个addButton,再读一遍数据(一样用page记录是第几次读20行数据)。将原来的HBox记录下来,新增一个Hbox插入到最前面,再将记录的HBox们插入。

2. ”1.“操作的MySQL需要有以下优化

一、设置一个自动递增的主键message_id,用来记录顺序,同时可以用于查找相应的外键数据。

二、设置按照message_id排序,设置倒序排序,将message_id大的放在前面。

4. MySQL数据库varchar类型数据长度范围

MySQL数据库的varchar(字符串类型)只是默认长度为255,它的实际范围应该如下图的警告所示,可能是1 - 10485760.

5. JDBC操作数据库时千万不要用rs.setString(1,1),而是使用rs.setString(1,"your_ziduan"),这样方便直接删掉没用的字段。如果你对数据表足够自信可以用int,可能查数据库会更快。

 

6. 重点:项目实现的过程

1. 先实现一个Static.FXMLLoader视图接收ois.readObject(PageMessge)的消息(ThreadLibrary.EnterStudentCourse)更新视图。

2. 实现该功能的所有实时更新优化

3. 扩展该功能慢慢的加入其他数据的加载

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值