首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >与Pheanstalk的陈旧连接

与Pheanstalk的陈旧连接
EN

Stack Overflow用户
提问于 2012-07-06 15:47:11
回答 2查看 1.6K关注 0票数 0

我正在使用beanstalkd将一些工作卸载到其他机器上。设置有点不寻常,服务器在互联网(公共ip)上,但消费者在一些家庭的adsl线路后面。因此,有一台linux服务器作为客户端,通过一个动态ip连接到服务器上获取作业。这都是PHP,我使用的是pheanstalk库。

一切都顺利地运行了一段时间,但随后adsl改变了IP (每24小时提供商强制断开-重新连接),客户端就挂起了,永远不会超出“保留”。

我认为在保留空间设置一个超时时间会有所帮助,但事实并非如此,就像客户端发出一个命令并阻塞一样,它从不检查超时时间。它只是发出一个带有超时的保留(而不是简单的保留),当超时发生时,服务器负责返回一个TIME_OUT。问题是,连接断开了(但TCP/IP直到任何一方尝试与另一端对话时才知道这一点),如果客户端阻止读取,它将永远不会返回。

该库似乎在本地支持某种超时(例如,当尝试连接到服务器时),但它似乎没有考虑到这种情况。

如何检测过时的连接并强制重新连接?协议(和pheanstalk本身)上是否有某种保持连接?

谢谢!

EN

回答 2

Stack Overflow用户

发布于 2012-10-25 14:04:24

您可以尝试在请求得到响应后立即关闭每个连接,然后每次重新打开一个新连接。

虽然没有close()函数,但使用unset($pheanstalk)删除Pheanstaly对象会将其关闭。

这个解释很有帮助:Pheanstalk (PHP client for beanstalk) - how do connections work?

票数 1
EN

Stack Overflow用户

发布于 2012-10-25 14:14:33

我还没有尝试过,但我想到了通过SSH隧道连接到beanstalk服务器的想法。我们可以在隧道上启用ServerAliveCountMaxServerAliveInterval选项,这样网络或服务器故障就会导致隧道关闭。这将导致pheanstalk客户端报告错误。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11357983

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档