第十五章:第23节论坛系统(BBS)用户中心-信件功能

更新于:2018-09-26 10:26:42

这个功能类似于网页版的聊天工具,方便了两个会员之间私密地交流,练习写这样的功能是非常实用的。如果以后去开发婚恋系统,肯定少不了信件功能。


开发信件功能是有一点难度的,首先至少设计两张数据表:


1.png


说说这两张表的关系:


用户A可以与用户B写信(互发信息),可以与用户C写信,也就是所有用户随意两个人即可组成一组,建立通信的关系。“用户来信对话表”就是通信关系表。


“用户来信内容表”就是内容表。每一条记录包含信息内容,信息来源,信息接收人,所属关系表ID……


两张表是一对多的关系。这样知道了两个人的UID,即可获得两人的对话ID,通过对话ID可获取两人所有的(未删除)聊天记录。


相关的代码:


控制器:app\home\controller\Uletter.php

模型:app\common\model\UserLetterDialog.php、UserLetterMsg.php

视图:app\home\view\uletter\index.html、dialog.html、app\home\view\huser\index.html


1.png


上图展示的是对话列表。


备:图上的分页使用的是楠神曾经写过的一个分页类库,分享给大家


1.png

1.png


上图展示的是对话内容。和消息提示功能一样,楠神也做了来信提示,第一时间让用户知道有未读信件。


楠神这个信件功能与QQ、微信聊天工具不一样的地方就是不能实时接收,需要刷新页面才能获取到新信件。所以楠神叫它信件功能,而不是聊天功能。实现实时接收也不是不可能,只需要在聊天的界面每隔一秒ajax请求下后台看看有没有新内容产生。但是这样做,频繁地请求服务器,太耗费系统资源。楠神看过一些婚恋网站的信件功能,也都没有做成实时接收的。处于系统角度考虑,我也不把信件功能做成实时接收的聊天功能。


还需要注意的地方,信件的删除功能:


我们都知道两个人的通信记录,比如A与B对话聊天,他俩的聊天记录存入数据库,两个人都能读到共同的聊天记录(楠神设计的没有单独分开存)。


如果做删除功能我们必须考虑这样的情况:


假如A清空聊天记录,但B没有清空聊天记录。如果程序直接把A的聊天记录删掉了,由于共用同一聊天数据,那B是不是也读取不到聊天记录了。所以必须在对话表、内容表上用一个字段('in_del')来标记有一方已把当前对话、当条聊天记录已删,通过程序判断,双方都删除了,这样才从数据库中真实地删掉。


当然也可以这样设计:


设计两张对话内容表(min_uid专属的与max_uid专属的),每个用户的每一条对话内容分别存入两张表中,min_uid用户删除某对话的聊天记录,就直接删掉min_uid专属的内容表。max_uid同理。


这样设计的弊端:1.造成数据库大量的重复数据 2.在未删除的情况下,有可能程序上的错误造成A、B两人看到的聊天记录不一样。


本节学习代码》》》