如何异步运行多个fsockopen()


How can I run multiple fsockopen() asynchronously

我正在进行一个项目,使用这个php类->php-smtp电子邮件验证来验证多个电子邮件ID。当我输入最多10个电子邮件ID时,代码运行良好,大约需要30-40秒才能给出结果。但我想输入数千个电子邮件ID并同时检查它们,而不是一个接一个地检查它们。由于单个php脚本中的fsockopen()只会逐个执行,

所以,我在这里想问,我是否可以以某种方式同时执行多个fsockopen()并更快地获得结果?或者有没有一种方法可以异步执行多个php脚本?

所以,我在这里想问,我是否可以以某种方式同时执行多个fsockopen()并更快地获得结果?

您正在寻找异步或非阻塞I/O:

在计算机科学中,异步I/O或非阻塞I/O是一种输入/输出处理形式,允许在传输完成之前继续进行其他处理。

非阻塞模式下的流将提前返回,而不是等待(阻塞),允许您读取或写入另一个流,甚至执行其他任务,而等效的阻塞代码将迫使您等待。

fsockopen能够返回合适的流,在TCP的情况下也会返回:您可以在PHP中编写执行异步I/O的代码,而无需任何框架或扩展的帮助。

如果你想自己写代码,下面的手册页面会很有帮助:

  • http://php.net/stream_set_blocking
  • http://php.net/stream_select

各种扩展暴露出比stream_select更好的轮询机制。

建议您使用现有的用于执行异步I/O的众多框架中的一个。他们通常会选择可用的最佳轮询机制。其中一些尝试让那些习惯于编写同步阻塞代码的人更容易实现。所有这些都经过了很好的测试,这使您能够继续执行手头的任务,而不用担心实现您想要使用的模式。

这类框架的非详尽清单:

  • https://github.com/amphp/amp
  • https://github.com/icicleio/icicle
  • https://github.com/reactphp

或者有没有一种方法可以异步执行多个php脚本?

我想你的意思是平行的。

是的,有很多并行执行PHP代码的方法,从执行同一脚本的许多实例(多处理),一直到使用多线程。

并行并发根本不适合这里的用例。