3

我需要一些帮助来理解 pheanstalk(php beanstalk 客户端)的使用。我有一个 PHP 程序,当表单数据发送到它时,它会在服务器上执行。然后 PHP 程序应将表单数据打包为 JSON 结构并将其发送到后端服务器进程。

我不明白的是与 beanstalkd 服务器的连接。我是否应该在每次 PHP 程序执行时创建一个新的 Pheanstalk() 对象 - 在这种情况下,我是否会产生创建连接的成本。连接何时关闭(因为 pheanstalk 中没有 close() 方法)?

如果连接是持久的,它是否在 PHP 程序的所有执行之间共享,在这种情况下,在并发命中的情况下会发生什么?谢谢你的帮助。

4

1 回答 1

4

是的,每次启动程序时,您都必须与 Pheanstalk(或任何其他库)创建一个新连接,因为 PHP 会重新启动每个连接。虽然开销很小。

Beanstalkd 进程经过优化,可以轻松处理多个连接,并将自动处理它们 - 你不会得到重复的作业,除非你在其中放置两个相同的作业(即使那样,它们也会有不同的作业 ID )。

在发送第一个命令之前,Pheanstalk 甚至不会向守护进程发送任何信息(包括打开连接)。正是由于这个原因,在您主动提出请求之前,您甚至无法判断守护程序是否还活着(在我的测试中,我得到了当前管的列表)。如果您在正在运行的程序中继续重用实例化类,那么它当然会继续重用它。

没有正式的close(),但unset($pheanstalk)会做同样的事情,运行析构函数。同样,调用是程序如此短暂,如果允许,守护程序可以保持打开这么多并发连接,这不是问题 - 它将像程序本身一样被关闭。

简而言之,别担心。将数据连接到 Beanstalkd 或从 Beanstalkd 发送数据的开销可能只是工作人员或生产者在生成请求/响应时所做的任何工作的一小部分。

于 2012-02-05T20:08:22.747 回答