gpt4 book ai didi

PHP 在单独的线程中发送 POST 请求并忘记

转载 作者:可可西里 更新时间:2023-11-01 13:26:41 25 4
gpt4 key购买 nike

我的应用程序处理预订,并且在处理过程中我希望它将预订详细信息发送给我的应用程序的任何合作伙伴进行预订,以便他们可以存储对预订的引用,并且没有保留完成我的应用程序必须执行的其他处理。

我考虑过如何向合作伙伴发送消息,我的解决方案是向正在预订的合作伙伴发送 cURL POST 请求(除了回答我的问题,也许有人有更好的方法解决方案?)

每个合作伙伴都会有一个特定的 URL,他们会设置该 URL 来接收此 POST 请求并存储我们发送给他们的预订信息。

问题:如果我们尝试发送此 POST 请求,而他们的 Web 服务器速度很慢或出现故障,那么我们可能会不必要地等待很长时间才能获得响应,这反过来又会延迟确认使用我们服务的实际用户的预订。

理想的解决方案:我想在另一个线程中发送此 PHP cURL 请求,以便我们可以继续我们的愉快方式并确认预订。如果在另一个线程中有延迟,这不会阻碍我们。

我考虑过的其他解决方案是:

  • 调用外部脚本(例如用 python 编写)来发送此请求。我读到使用 exec() 可能会占用大量资源。我们有很多预订,所以我们会发送很多这样的预订帖子。所以理想情况下,我们需要一些资源良知。
  • 使用套接字。我不熟悉这些配置,我担心我们的套接字服务器出现故障。这也感觉像是一个要维护的使命。也许我错了?
  • 使用类似 Pusher 的服务这实际上是一个套接字服务。缺点是如果听众错过了一条消息,他们将永远不会再收到它。例如。合作伙伴会错过存储该预订的机会。

如果能得到一些关于我在这里试图完成的事情的反馈,尤其是来自那些一直需要针对我所处的同类情况的解决方案的人,那就太好了。感谢您的帮助!

最佳答案

所以本质上,您是在用 PHP 创建一个供其他客户端使用的 API。这是我的建议:

  1. 让您的客户通过 POST/GET 方法向您发出请求;而不是您作为试图将数据推送到您的客户端的 API 服务器。这是更好的方法,因为它可以让您摆脱客户端服务器宕机、变慢或其他问题。因此,当他们向您发送请求时,这意味着他们完全有能力处理响应。

  2. 使用 HTTP 持久连接:在 apache 中,将其称为 keep-alive 的值设置为高,以便客户端可以重用现有连接,从而减少延迟。

  3. 对于 php 中的多处理,请查看 Getting into multiprocessing .基本上,pcntl_fork() 函数允许您 fork 一个进程并为多处理创建新的子进程。

  4. 基于 redis 或类似的东西实现一个后台作业队列。想法是,所有长时间运行的作业都被放入后台作业队列中,然后为每个任务生成一个工作人员,以便通过多处理执行这些作业。 PHP Workers with Redis & Solo

希望对你有帮助

关于PHP 在单独的线程中发送 POST 请求并忘记,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13094698/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com