我正在使用cURL连接到一家名为Gnip的公司管理的服务器。(www.gnip.com)最终,我们希望无限期地使用管道json提要。
最初,当我设置我们的软件时,有一个很好的小类是用来维护连接的;它是通过gnip从社交中提供的。
Gnip改变了他们要求连接的方式,所以类中断了。
我可以很好地连接到服务器。有时它会持续打开几天,有时连接在几秒钟内就会断掉。
所有东西的工作方式是:我连接到gnip并保持一个开放的连接。gnip将数据以json字符串的形式实时(当他们收到数据时)发回给我。如果在30秒内没有数据发送,它们会发送一个'keep alive‘信号,让我的脚本知道它还在连接。
理想情况下,脚本只会在两台服务器中的一台关闭时断开连接。我已经通过cronjob解决了这个问题。
问题是连接有时会意外关闭。我联系了gnip,他们的日志显示断开连接不是他们的错。
这一切都超出了我的正常范围。我确信curl发送了某种类型的错误,但我不知道如何找到它才能记录它。
这是我到目前为止编写的代码的副本:http://pastebin.com/jpHzvbTF
我喜欢直接的“这就是你是如何解决它的”,但我也想知道一些可以引导我找到自己的解决方案的术语。
我读过Keep-alive in curl / php,但我发现它并不像当时建议的那样与此相关。
发布于 2012-07-08 04:14:47
我在一家公司工作,该公司是Gnip的客户,使用的产品与您使用的产品相同。我们的代码是用Java编写的,而不是用PHP编写的,所以我可能不能对您有很大的帮助,但这是我在使用这些提要时发现的:
我希望我能在如何处理你正在使用的特定技术中看到的问题方面给你更好的建议。深入研究一下流HTTP (或保持活动的HTTP会话),看看这是否对您没有帮助。一定要弄清楚如何捕获任何类型的断开连接,然后重新连接。
Gnip已经开始建议人们实现重新连接退避逻辑,这意味着您的重新连接将,比如说,立即开始,并在每次连续重新连接失败时,等待n*2 < 10秒,其中n是到目前为止的连接尝试次数,然后重试。Twitter自己要求将其作为其流媒体服务的一部分,而Gnip只是建议(毕竟这是一项付费服务),但如果你想让你的Gnip UI不被失败的尝试弄得一团糟,我建议你这样做。
在大多数情况下,我使用Gnip的经验都很好。但是流HTTP是一种非常不完美的技术(正如我们已经发现的那样)。有一种有点天真的想法,认为你只需联系一次,就能幸福地生活在一起。刚开始的时候我也是这么想的,现在我有点愤世嫉俗了。如果我有自己的选择,我永远不会支持一个建立在流HTTP之上的生产系统,它的服务在我自己的网络之外。我更愿意FTP丢弃,因为这是一个痛苦的臀部的类型,您可能会谈论的数量。不幸的是,它们并不适用于该产品线。
祝好运。
https://stackoverflow.com/questions/10305434
复制相似问题