如何异步运行多个fsockopen()函数

3
我正在处理一个关于验证多个电子邮件ID的项目,使用了这个php类 -> php-smtp-email-validation。当我输入最多10个电子邮件ID时,代码可以正常运行,需要30-40秒才能给出结果。但我想同时输入数千个电子邮件ID并检查它们,而不是逐个检查。由于在单个php脚本中fsockopen()只会逐个执行,因此我想知道是否有某种方法可以同时执行多个fsockopen()并更快地获取结果?还是有一种方法可以异步执行多个php脚本吗?
1个回答

3
我在这里想问一下,是否可以同时执行多个 fsockopen() 并更快地获得结果?
您正在寻找 异步或非阻塞 I/O:
在计算机科学中,异步 I/O 或非阻塞 I/O 是一种输入/输出处理形式,允许其他处理在传输完成之前继续进行。
非阻塞模式下的流会提前返回而不是等待(阻塞),使您能够从另一个流中读取或写入,甚至在等效的阻塞代码强制您等待时执行某些其他任务。
fsockopen 能够返回适当的流,并且在 TCP 的情况下将返回:您可以编写在 PHP 中执行异步 I/O 的代码,而无需任何框架或扩展程序的帮助。
如果您想自己编写代码,则以下手册页面将有所帮助:

有许多扩展比stream_select更好地暴露了轮询机制。

建议使用其中一个现有的异步I/O框架,它们通常会选择可用的最佳轮询机制。其中一些尝试为习惯编写同步阻塞代码的人简化实现。所有这些框架都经过充分测试,这使您可以专注于手头的任务,而不必担心实现要使用的模式。

此类框架的非全面列表:

还是说我可以异步执行多个php脚本的方法?

我想你是指并行执行。

是的,有多种方式可以并行执行PHP代码,从执行许多相同脚本的实例(多进程)到使用多线程。

并行并发在这里根本不适用。


感谢您的回答。由于服务器限制,我无法完成这个项目。大多数共享/虚拟服务器不允许运行fsockopen()和验证电子邮件ID。根据他们的条款,该过程类似于垃圾邮件,因此不受支持。 - Anoop Nair

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接