Wenn Sie E-Mails in Stapeln versenden, müssen Sie die Sendeergebnisse erhalten, also müssen Sie auf die Anfrageergebnisse warten.
Gibt es für PHP eine Möglichkeit, die Schnittstelle asynchron anzufordern, dann die Daten abzurufen und dann die Rückruffunktion auszuführen?
Jetzt ist es eine synchrone Anforderungsschnittstelle, und dann warten Sie, sie ist sehr langsam. . Und die Server-CPU erhöht sich während der Ausführung. .
Bitte Gott um Erleuchtung
Der entscheidende Punkt ist jetzt, dass wir nicht auf die Rückgabe der Anfrage warten möchten, da diese sehr langsam ist, und bei einer Rückgabe direkt einen bestimmten Codeabschnitt aufrufen möchten. . Die Redis-Warteschlange wird bereits verwendet und das Skript wird ausgeführt
php安装多线程扩展。自己扩展即可达到,js也是单线程实现的。
可以尝试使用
reactphp
,workerman
,swoole
这些库来执行异步任务php自带的curl_multi就可以实现了
强烈推荐你使用workerman,如果使用了fsockopen,这个只是讲异步发出去了,但是并没有返回回来!如果你要异步处理,就用workerman.当然swoole也可以的,但是呢,这个有C语言的,一些报错信息是C的。你会C你也可以用这个。workerman入门特简单。具体的实现逻辑如下:
当你需要异步的时候,你直接调用workerman,来执行你的逻辑,这个workerman这里是同步执行的,
workerman执行逻辑过后,通过异步的方式来调用task任务,这个是workerman的异步。workerman直接返回。
当你的task任务搞定了过后,就讲传递到workerman中,在由workerman来执行你异步之后的逻辑。
给你一个备份里面有PHP异步通信的框架
github-php-awesome 翻译过后的
队列
1.把需要发送的信息存到Redis或者其他内存缓存里面。
2.php提供一个需要访问密钥token的接口,这个接口便是循环的读取缓存redis里面得邮件数据,去发送。
3.使用定时任务windows和linux均有方案,定时去http请求这个php接口,完成发送。也相当于就是异步了。