PHP 有没有类似异步的功能?

2017-04-27 18:13:32 +08:00
 cstome

大概情况

我是做前端的,会点 PHP,但不打算花太多时间深入学 PHP (正在学 Python ),所以想问问有没有捷径。

大概需求

最近做个小项目,用 PHP 输出 JSON 并发送邮件,大概逻辑是这样的:

处理 JSON...

返回 JSON...

发邮件(调用 PHPMailer )...

但是这样的话会等待发邮件任务完成在返回 JSON,想知道有什么方法可以先返回(即结束当前脚本),在处理发邮件的任务?

9210 次点击
所在节点    PHP
55 条回复
barbery
2017-04-28 10:09:16 +08:00
这个用队列不就完了?
dryyun
2017-04-28 10:58:28 +08:00
既然是小项目,为什么要做的那么复杂。发个邮件能用多久呢。。
直接 try{
发邮件。。
}catch(){
...
}
发邮件能成功就是很快的,不能成功,就是会报错,干脆发邮件超时时间设的稍微短一点,不就解决问题了。
iyaozhen
2017-04-28 11:06:38 +08:00
@kran 这个比较简单。先给前端返回数据,然后再发送邮件,完成后进程才会退出。
silva
2017-04-28 11:17:20 +08:00
@R18 我看你给出的链接里不是说明 PHP 有 pcntl_fork()接口么,为何他们都说的那么绕呢?
R18
2017-04-28 11:22:46 +08:00
@silva 我也不晓得,可能不符合实际场景吧
suconghou
2017-04-28 11:29:56 +08:00
@jininij 然而并不是
qieqie
2017-04-28 11:33:19 +08:00
@jininij 你这是把 php 脑补成 go 了,generator 需要你手动调度自己实现协程,也依赖更底层的异步 io 接口(换句话说就是支持 non-blocking io 扩展或者用 libevent 这样的事件通知库自己实现)
tkisme
2017-04-28 13:15:03 +08:00
celery
flowfire
2017-04-28 18:12:10 +08:00
nodejs 大法好
我自从用了 node 就再也不想碰 php 了
xiaotianhu
2017-04-28 22:57:14 +08:00
fastcgi_finish_request 最简单的套路
abcbuzhiming
2017-05-04 11:34:50 +08:00
php 的异步都是扯淡的,不借助队列压根没办法,除非你能自己写插件,所以简单的就搞个队列比如 redis,复杂的。。
nobird
2017-05-16 01:33:35 +08:00
需要发送的邮件内容存入数据库 当作一个队列处理 有访客访问页面的时候 每个页面刷新就发送一个邮件 小规模使用的话 效果还不错
arist
2017-05-16 15:03:17 +08:00
我司是这样处理,
1. 把消息写入数据库队列
2. 使用 fsockopen 异步调用消息处理的程序,这个相当于非阻塞的模式,不需等待远端返回。
3. 直接返回成功
wizardforcel
2017-05-19 18:23:22 +08:00
你应该听说过一个词,queue based architecture。
cccoco123
2017-07-18 17:30:16 +08:00
https://github.com/fucongcong/Group-Co
异步协程框架,SOA 服务化调用,支持并行、串行调用。支持异步日志,异步文件读写,异步 Mysql,异步 Redis,Mysql,Redis 连接池

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/357776

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX