我正在维护旧的基于 PHP 的 CMS,其中包含论坛软件、文章发布系统等 - 都是自定义的。现在所有者想要实现一个全局的、伪实时的(它可能每十秒左右更新一次)事件流,类似于 Facebook 上的事件流:
现在我正在尝试想出最好和最简单的方法来实现它,以便可以轻松扩展以包括不同类型的事件(创建博客帖子、评论相册/博客帖子、创建或回复论坛主题、发布文章等)
前端位应该不会太难,我不确定的是我应该如何设置事件表以适应将包含的所有不同类型的事件。 所有事件都将包括用户 ID、URL、日期时间和“事件类型”等内容,但我必须保存非常不同的数据,具体取决于用户是创建了相册还是有人回复了论坛线。我该如何解决这个问题?
最佳答案
根据每个用户的观点是否独特,您可以采用几种方法 - 例如:他们是否可以将某些事物标记为他们不感兴趣,或者您想隐藏他们已经拥有的项目读。 (我在这个答案中假设所有用户看到相同的提要。)
我不会使用单独的事件表来存储“ Action ”,原因如下:
- 信息仅在很短的时间内有效(只要项目从列表顶部消失所需的时间)因此您想要清除旧值,本质上是创建一个重量级的 FIFO 缓冲区
- 您将在系统中存储现有数据的副本(即,当新闻报道的记录上已有创建时间时,一条记录表明新闻报道 X 是在 Y 时间创建的)
- 如果撤消操作(或删除项目),您还需要删除事件表中的相关条目
- 不同类型的事件会有不同的信息和元数据,因此很难将它们全部规范化到一个表架构中
你可以:
- 每 5 分钟左右运行一次计划脚本,检查是否有任何新事件(即查找不到 X 分钟的新帖子)并编写一个静态 HTML 文件,其中包含可以嵌入到所有页面中的事件提要内容应该是可见的
- 在事件发生时将您的事件写入内存存储(即内存缓存),并同时刷新比您的最大操作年龄更早的条目
- 创建一个动态获取最新操作数据的提要,但位于代理服务器的后面,代理服务器会将其缓存一段时间...(这种方法也适用于每个用户的提要)
更新:原始发布者已确认所有用户看到相同的提要内容。基于此,我建议最简单的解决方案是安排一个脚本,该脚本生成提要的静态 HTML 文件,可以在需要的地方直接嵌入到页面中(因为它不需要安装和配置内存存储或代理)服务器)。
关于php - 实时事件流程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8954584/