gpt4 book ai didi

php - Symfony2 中的多线程

转载 作者:塔克拉玛干 更新时间:2023-11-03 06:05:34 25 4
gpt4 key购买 nike

我这里有点情况。我正在使用 symfony2 和 facebook SDK 为我的 iPhone 和 Android 应用程序设置 Web 服务。问题是后台工作可能需要相当长的时间。用户首先被重定向到 facebook 登录页面,在那里他可以通过接受我的 facebook 应用程序权限来继续。因此,与其等待我的服务完成后台工作,不如立即通知用户一切正常。服务应该在后台继续工作,用户应该不会意识到这一点。这是 Controller 操作的相关部分:

public function persistPostsAction() {

...
if ($this->CheckUser($user_id) == 0) {
/*This function should be called on background thread*/
$this->persistPosts($user_id);
}

...

return $this->render('FacebookAPIFacebookBundle:Page:postovi.html.twig', array(
'FacebookPosts' => $pwu
));
}

如何在另一个线程上调用 $this->persistPosts($user_id); 函数然后继续执行?此类问题的最佳做法是什么?

最佳答案

PHP 确实支持多线程,可以找到 pthreads 的文档:http://php.net/pthreads

许多用法示例:https://github.com/krakjoe/pthreads/tree/master/examples

它不像创建一个线程并允许它在完成请求服务时在后台执行那样简单,虽然您可以通过从服务请求的主线程分离来做到这一点,但这不是一个好主意。

您永远不想创建任何线程来直接响应 Web 请求,因为这只能扩展到此为止。相反,您想要做的是将您需要不断运行的应用程序部分分开,而不管网站的前端部分在做什么。我们将这个新分离的应用程序部分称为后端。应用程序的后端应该是一个一直运行的服务,独立于 apache、fpm 或 nginx。它很可能使用多线程来最大化后端服务的吞吐量,您仍然需要一些简单的方式让前端和后端进行通信; unix 域套接字、tcp 套接字等。在应用程序的前端和后端之间有一个通信 channel ,前端可以传递数据并指示后端以任何适当的形式对事务进行排队,而前端永远不必等待结果。这是一个更好的设计,它不一定需要任何多线程,但毫无疑问它是一个候选者。

重要的是要记住,在某事上投入线程并不一定会使事情变得更好,唯一可以肯定的是它会更忙,性能不是默认使用的产物,你必须考虑仔细考虑您将如何使用资源、您将如何在应用程序的组件部分之间进行通信,以及如何使用最少数量的线程(或者实际上是进程)来实现最大吞吐量。

关于php - Symfony2 中的多线程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20791153/

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