【问题标题】:Pheanstalk (PHP client for beanstalk) - how do connections work?Pheanstalk(beantalk 的 PHP 客户端)- 连接如何工作?
【发布时间】:2012-02-05 17:28:59
【问题描述】:

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

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

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

【问题讨论】:

    标签: php beanstalkd


    【解决方案1】:

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

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

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

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

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

    【讨论】:

    • 谢谢!这正是我正在寻找的答案。
    猜你喜欢
    • 2015-01-03
    • 2021-12-23
    • 2011-10-09
    • 2011-08-22
    • 2017-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多