PHP异步调用的实现方式
比如现在有个需求,就是给大量用户发送邮件:
<code>$i=0; while ($i </code>
对于以上事例代码的用户体验就很差,实际上也没人会这么干,那么怎样使用程序后台异步执行,而又不影响用户的体验呢?
求思路...
回复内容:
比如现在有个需求,就是给大量用户发送邮件:
<code>$i=0; while ($i </code>
对于以上事例代码的用户体验就很差,实际上也没人会这么干,那么怎样使用程序后台异步执行,而又不影响用户的体验呢?
求思路...
我们使用的是laravel框架 + beanstalkd 队列,网上有安装和使用的说明.
youku里有一个laravel框架的视频教程,有一章就是讲队列的.
简单点,你按照那上面来做一遍就行了.
http://v.youku.com/v_show/id_XNzgzNjQ2ODQ0.html
Laravel+Redis也行,你自己先试试,不明白继续提问.
还有一种方式,你用swoole框架. 用里面的异步调用.详见:www.swoole.com
或者更简单的方式,但不适合你这种情况,但可以参考:http://www.laruence.com/2008/04/14/318.html
你看着三种方式哪种更适合些?
用redis服务 消息队列做两个php进程的之间的通讯,实现多个进程异步执行
使用消息队列。
1、建立一个邮件队列数据表和一个插入邮件队列的PHP公共函数
2、在需要发送邮件的地方,调用上面的PHP公共函数,将邮件先写到邮件队列中。
3、用crontab建立一个定时任务,定期扫描邮件队列,如果有未发送的邮件,则进行发送
其实示例代码没有错,实际上也就是这么做的,只不过是作为单独一个进程来执行的,就像楼上几位说的一样。但是这依然是用阻塞模式运行的。
redis队列和php多进程,和一楼思路一样的,之前项目中也是用的这种方式。
推荐Gearman,百万级生产环境跑过。
我们的shopex为了兼容各种虚拟主机曾经这么干过:
页面下面挂个
ignore_user_abort(true);
set_time_limit(0);
header('Content-Lenght: 6');
echo 'void()';
...干一部分活...
curl / fsockopen 请求自己...
别忘了, 开头加个锁, 避免同时干活的太多.
使用Linux的CRON任务或者使用fsockopen来实现或者CURL
可以使用第三方邮件发送服务平台

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제









이번 장에서는 CakePHP의 환경 변수, 일반 구성, 데이터베이스 구성, 이메일 구성에 대해 알아봅니다.

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP에서 데이터베이스 작업은 매우 쉽습니다. 이번 장에서는 CRUD(생성, 읽기, 업데이트, 삭제) 작업을 이해하겠습니다.

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu
