【问题标题】:How to build an efficient notification system?如何构建高效的通知系统?
【发布时间】:2017-08-22 17:32:29
【问题描述】:

我需要为我网站的用户建立一个通知系统。 每个用户都关注一些主题,因此,当有人发布有关某个主题的内容时,每个关注该主题的用户都必须收到通知。

现在我有一个 cronjob,它获取每个用户通知的最后打开时间的日期,然后我获取在此日期之后发布的所有帖子,然后将其保存到每个用户的通知表中

---------------     ---------------------------------------
|   new_post   |    |               USERS                 |
---------------     ---------------------------------------
|  id  | post  |    |ud_usr |last_notif_opening(datestamp)|
---------------     ---------------------------------------
|   1  string  |    |   1   |   2017-08-21 10:10:10       |

而那些,我实际上在每一个中存储了新帖子的 id,所以接下来我获取这些表的记录,然后我获取与 id 列的关系的文本。

-notification_user1
-notification_user2
-notification_user3

我认为这不是一个好的解决方案,因为可能某个用户无法在正确的时间收到他的通知,因为 cronjob 正在检查另一个用户的通知。

你们能帮我找到更好的解决方案吗?

【问题讨论】:

  • 我建议你为此使用网络套接字
  • 什么意思?
  • 这不完全是您的需要,但您可以查看https://notiflare.io。这是一个随时可用的通知系统。它可以更简单地替代您的问题(如果其他人也有同样的问题):D

标签: php mysql cron


【解决方案1】:

你应该使用实时解决方案,关于实时网络应用程序,有很多技术可供使用,目前网络上使用最多的可能是 nodeJs

在 PHP 中,当你使用 Laravel 之类的框架时,Laravel 框架内部有一个强大的通知组件,但如果你想使用纯 PHP 或其他 php 框架,最有效的方法是在 PHP 中使用 WebSockets。

当使用 WebSockets 时,您需要一个 websocket 服务器来处理两个对等点之间的通信,让我准确解释一下您在这方面的问题。 您正在寻找的是某种频道,您希望用户订阅频道,将通知推送到频道中,以便订阅者可以获得推送的消息或数据。 在 PHP 中实现这种功能并不是一项艰巨的任务,您应该使用以下功能:

  1. Ratchet : PHP Websocket 库还具有轻松制作 Web 套接字服务器的功能
  2. Thruway:PHP 库写在棘轮之上,当你想创建频道时,你需要这个支持 WAMP(Web 应用程序消息协议)版本 2 的库
  3. AutobahnJs:用于处理客户端代码以使用 WAMP 并创建通道。

以上特性是您在 PHP 中使用 websockets 和通道所需要的全部。希望对你有帮助

【讨论】:

  • 你可以开始在 PHP 中使用 WebSockets 和 WebSocket 学习,然后在学习棘轮/Wamp 组件之后继续使用棘轮,然后通过 autobahnJs 继续学习高速公路的使用
  • 让我解释一下 wamp 中的主题正是频道,它们是相同的方法,只是命名不同
  • 对不起,我对此一无所知..你告诉我需要一个 websocket 服务器,所以,假设我已经用棘轮等创建了通知系统,当我必须上网时我必须做什么新系统?因为目前我的网站有 cpanel 并停止
  • 如果可能的话,您可以要求托管公司在命令行上运行您的服务器脚本,或者我不知道可能是 Cpanel 具有运行这样的脚本的功能,可能是某种cron 作业或类似的东西。您也可以在另一台服务器和 IP 上拥有 websocket 服务器的脚本
【解决方案2】:
猜你喜欢
  • 2015-06-14
  • 1970-01-01
  • 2020-08-25
  • 2011-09-09
  • 1970-01-01
  • 2017-02-03
  • 1970-01-01
  • 1970-01-01
  • 2012-03-23
相关资源
最近更新 更多