我的上家公司的产品中,有一个直播系统。主要是让店铺进行直播卖货,店铺端作为主播,播送店铺里的商品供买家观看和购买。在去年离职的前一个月,产品告诉我一个任务,我们的直播系统,要让用户互动起来,所以需要加入一个类似于淘宝直播的聊天框的功能。
离职后结婚,忙了一阵。而后想出去旅游,赶上了新冠肺炎,于是就在家宅了春节前后两个月。当人的心灵空虚到一定程度的时候,就一定会给自己找事做。于是,研究了一些PHP7的源码,对之前工作中不如意的地方做了一些总结,然后想到了之前自己写的这个实时聊天的服务。源码在上家公司离职的时候就删掉了,但就现在回想起来,依然有不少问题存在。因此想着重新实现一下这个服务,一来可以加深自己的理解,二来可以打发一下百无聊赖的心绪,实为一举两得。
1 需求分析
产品只说了一句“需要像淘宝直播一样有聊天框,用户说的话可以实时显示,并且用户进入房间要通知其他用户‘xxx进来了’的字样”。
虽然产品说的需求就这么一句话,但是作为项目负责人,还是不得不分析一下。
首先,每个店铺都可以直播,每个直播都对应一个ID,那么用户无论是进入哪个直播都必须给聊天服务传递一个直播ID,否则无法将人对应到直播。
其次,要有个媒介来存储当前直播和用户之间的关系,在某个用户发言的时候,通过用户传入的直播ID来广播到所有用户。
再次,要有一个聊天内容过滤的机制。当某个用户发送不良言论的时候,直接替换掉敏感词。
OK,让我们一一来解决。
2 技术选型
2.1. 语言框架
PHP中可以实现长连接的方法一共有两种,Workerman和Swoole。不过鉴于二者目前的市场表现和热度,所以选择了后者。
2.2. 数据库
由于聊天过程中,用户可以随时进出,所以对于数据库的读写是比较频繁的。因此选择Redis来存储用户的信息,以及用户直播的对应关系更为合理。
OK,有了合适的框架和数据库,我们接下来就可以整理架构了。