我想帮助理解pheanstalk(php beanstalk客户端)的使用。我有一个PHP程序,在表单数据发送到服务器时在服务器上执行。然后,PHP程序应将表单数据打包为JSON结构,并将其发送到后端服务器进程。
我不明白的是与beanstalkd服务器的连接。我应该在每次PHP程序执行时创建一个新的Pheanstalk()对象 - 在这种情况下,我要承担创建连接的成本。什么时候连接关闭(因为pheanstalk中没有close()方法)?
如果连接是持久的,它是否在PHP程序的所有执行中共享,在这种情况下,在并发命中的情况下会发生什么?谢谢你的帮助。
答案 0 :(得分:4)
是的,每次启动程序时都必须与Pheanstalk(或任何其他库)建立新连接,因为PHP会为每个程序启动新的连接。虽然开销很小。
Beanstalkd进程经过优化,可轻松处理多个连接,并以原子方式对其进行操作 - 除非你在其中放入两个相同的工作,否则你不会得到重复的工作(即便如此,它们会有不同的作业ID的)。
Pheanstalk甚至不会向守护进程发送任何信息(包括打开连接),直到发送第一个命令。出于这个原因,你无法判断守护进程是否还活着,直到你主动发出请求(在我的测试中,我得到了当前管的列表)。如果你继续在正在运行的程序中重用实例化的类,那么它当然会继续重用它。
没有正式的close()
,但unset($pheanstalk)
会做同样的事情,运行析构函数。同样,调用是程序如此短暂,并且守护进程可以保持这么多并发连接打开(如果允许的话),这不是问题 - 并且它将像程序本身那样关闭。