Phanstalk(豆茎的PHP客户端)-连接是如何工作的


Pheanstalk (PHP client for beanstalk) - how do connections work?

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

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

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

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

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

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

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

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