Pheanstalk(beanstalk的PHP客户端) - 连接如何工作?

时间:2012-02-05 17:29:00

标签: php beanstalkd

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

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

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

1 个答案:

答案 0 :(得分:4)

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

Beanstalkd进程经过优化,可轻松处理多个连接,并以原子方式对其进行操作 - 除非你在其中放入两个相同的工作,否则你不会得到重复的工作(即便如此,它们会有不同的作业ID的)。

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

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

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