首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用curl和php保持到管道的活动连接

使用curl和php保持到管道的活动连接
EN

Stack Overflow用户
提问于 2012-04-25 04:21:12
回答 1查看 955关注 0票数 1

我正在使用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,但我发现它并不像当时建议的那样与此相关。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-07-08 04:14:47

我在一家公司工作,该公司是Gnip的客户,使用的产品与您使用的产品相同。我们的代码是用Java编写的,而不是用PHP编写的,所以我可能不能对您有很大的帮助,但这是我在使用这些提要时发现的:

  1. 流超文本传输协议并不像它被破解的那样。在你所处的位置和托管Gnip端点的位置之间可能会出现很多问题。
  2. 你将需要构建逻辑来检测断开连接并尝试重新连接。同样,我不确定如何使用cURL和PHP来实现这一点。在Java中,对我们起作用的是输入流上的读取超时和强制异常的连接超时,因此我们丢弃连接并重试,但您也必须小心这些- TCP读取超时太短将导致您不断重新连接,这会在Gnip的UI中产生非常奇怪的行为。然而,使用这样的东西将允许您捕获Gnip未能发送其keep-alive新行的状态,并适当地循环您的connection.
  3. Gnip对其软件进行定期更新,并在其术语中说明这一点。在这些更新过程中,他们可能会断开您的连接,而您将需要重新连接。除非它们的一端有bug,否则这种丢弃通常会发出正确的信号,而不会使您的连接处于糟糕的状态,因此,无论您用什么来检测断开的连接,您都可以重新连接,一切都是正常的。

我希望我能在如何处理你正在使用的特定技术中看到的问题方面给你更好的建议。深入研究一下流HTTP (或保持活动的HTTP会话),看看这是否对您没有帮助。一定要弄清楚如何捕获任何类型的断开连接,然后重新连接。

Gnip已经开始建议人们实现重新连接退避逻辑,这意味着您的重新连接将,比如说,立即开始,并在每次连续重新连接失败时,等待n*2 < 10秒,其中n是到目前为止的连接尝试次数,然后重试。Twitter自己要求将其作为其流媒体服务的一部分,而Gnip只是建议(毕竟这是一项付费服务),但如果你想让你的Gnip UI不被失败的尝试弄得一团糟,我建议你这样做。

在大多数情况下,我使用Gnip的经验都很好。但是流HTTP是一种非常不完美的技术(正如我们已经发现的那样)。有一种有点天真的想法,认为你只需联系一次,就能幸福地生活在一起。刚开始的时候我也是这么想的,现在我有点愤世嫉俗了。如果我有自己的选择,我永远不会支持一个建立在流HTTP之上的生产系统,它的服务在我自己的网络之外。我更愿意FTP丢弃,因为这是一个痛苦的臀部的类型,您可能会谈论的数量。不幸的是,它们并不适用于该产品线。

祝好运。

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

https://stackoverflow.com/questions/10305434

复制
相关文章

相似问题

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