【问题标题】:Get update from mysql as soon as a new insert新插入后立即从 mysql 获取更新
【发布时间】:2018-04-12 18:34:47
【问题描述】:

我有一个网店,用户的订单将保存在mysql上,稍后将由“processor.php”批量处理,稍后会处理,因为将此订单发送到其他服务器的要求是使用聊天应用程序

processor.php 是一个 jabber bot,php bot 将 24/7 运行,它将每 5 分钟检查一次 db 并处理订单(将其发送到另一个机器人,并根据其他机器人回复更新订单)

我想知道是否有办法让 processor.php 可以在每次用户提交新订单时从 mysql 收到类似“嘿,有一个新订单,处理它”的通知,就像实时一样

【问题讨论】:

  • 设置触发器。
  • 我的建议是以另一种方式进行。你有网店。为什么不做“processor.php”在订单保存后所做的事情呢?几乎每个电子商务解决方案都包含事件/观察者类型的钩子来实现这一点。这完全取决于您要实现的目标以及您的设置。您为什么希望它以这种方式工作?
  • processor.php 是一个 jabber bot,两个或多个 bot 之间的聊天
  • @DhivaBanyuWigara,这会改变您的问题要求吗?也许在您的问题中包含这些细节是个好主意?我仍然看不到如何在您的订单代码中设置挂钩以让“processor.php”文件知道已下新订单不是可行的解决方案。您能否更新您的问题以包含这些内容?我将发布一些链接和建议,以供新人使用。正如我所说,这似乎越来越像一个架构问题,而不是一个特定于编程的问题。

标签: php mysql real-time


【解决方案1】:

您可以做的最好的事情是首先编辑插入数据的文件。

你可以使用 $query->insert_id;如果您需要新订单的 ID,则使用 myqsli 等效项

然后您可以将此 ID 传递给处理器。相信我,依赖 crons 可能会成为一场噩梦,对于付款和订单,我强烈建议避免使用 cron 解决方案。

也就是说,如果您的处理器仅更改数据库本身的内容而没有其他内容,则您可以使用内部 MySQL 触发器!

https://www.siteground.com/kb/mysql-triggers-use/

但如果您的处理器执行非 DB 工作,您将不得不:

使用你的 cron

设置订单插入,然后在不使用 cron 的情况下自行触发处理器。

设置一个函数,在用户访问的页面上查看订单是否已准备好进行处理,以便他们的订单可以立即开始处理。

您可以使用 AJAX 甚至 PHP 来调用 processor.php。你甚至可以给它传递一个特定的 ID。基本上任何基本方法,如文件获取内容、$.get() 或任何其他编程函数(任何语言)都可以让您调用 processor.php 并让该文件在您的 Web 服务器上运行。您可以使用任何支持从相同或不同服务器(大多数情况下)请求文件的语言来执行此操作。

我强烈建议您确保设置适当的权限,甚至设置基本 API,这样只有您的服务器和服务才能触发处理器!

【讨论】:

  • 为什么说“crons 会成为噩梦”?这通常是最好的选择——尤其是对于那些你不希望在你的钩子中潜在的挂断给订单创建带来问题的订单。使用 cron,您可以获得完全隔离的内容,并且不会干扰执行插入的脚本。
  • Cron 应该用于查找未能处理的订单。开始处理订单不应该是主要的事情。 :)
猜你喜欢
  • 1970-01-01
  • 2019-11-15
  • 1970-01-01
  • 1970-01-01
  • 2016-01-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多