① 用户信息
② 会话信息
会话一 : A
与B
进行通话;
会话二: A
与C
进行通话;
会话三:如果此时A
、B
、C
三者进行通话,那么此时就是一个群聊会话;
会话持续的周期是非常长的,一直到把对方好友删除或者退出群聊当前会话才会销毁。
③ 消息信息
a
.文本消息;b
.图片消息;c
.文件消息;d
.语音消息;
如果代码所在的文件就是项目的顶层目录中,此时直接使用全局的命名空间(不需要手动指定)。
如果代码所在的文件在某个子目录中,此时,就指定一个和目录名字相同的命名空间。
使代码中命名空间的结构和文件在目录中的结构一致。
为什么用户编号不用整形而用QString
?
因为MySQL
数据库是支持自增主键的,如果是单个节点的mysql
,这种自增的方式是没有问题的;但是如果是多个节点的分布式mysql
,无法使用整数自增主键了,因为可能出现主键重复的情况。
userId
是提供谁的呢?userId
表示” 对方 “的用户userId
;userId
设为"",后续通过其他的方式来把完整的用户userId
列表拿到;userId
来区分是单聊还是群聊。chatSessionId
可以找到消息所属会话的编号。消息正文内容的类型为什么是QByteArray
呢?
1)图片、文件、语音消息的正文是一个二进制的序列,表示二进制数据必须使用QByteArray
;
2)不同的编码方式,一个 char
(字符)对应的字节不同。
对于英文ASCII
来说,一个字符就是一个字节
对于中文gbk
编码来说,一个字符是两个字节
对于中文utf-8
编码来说,一个字符是三个字节
QString fileId
的作用?1)因为文件、图片、语言这些占用的存储空间是比较大的,一旦聊天会话中包含了多个上述这样的消息,就会使从服务器获取消息列表的操作变得非常低效。
2)针对上述问题如何解决呢? — 是先 ”获取消息列表“,只是拿到文件、图片、语音 消息的fileId
,等到客户端得到消息列表之后,再根据拿到的fileId
给服务器发送额外的请求,获取文件的内容。
结果:提高客户端访问服务器的并发程度,本来是阻塞式的把所有结果都给客户端,现在是拆成多个部分,哪些先给我返回了,就先显示哪些,灵活调整,按需加载。