【发布时间】:2016-02-15 22:09:31
【问题描述】:
我们的后端(rails)需要与一些 3rd 方服务通信(我们无法控制它)。与此服务的所有通信都必须使用单个持久 HTTP 连接来完成。
作为来自服务器的-> 请求和<- 响应,这是当前流程:
-> Login
<- Ok
-> Subscribe
<- Ok
<- Data
<- Data
<- Data
...
<- Data
一旦订阅完成,服务器就会开始不时发送一些数据。这些是我们必须处理的实时更新。问题是我们找不到合适的方法来处理这个问题。
Subscribe的响应头很简单
Connection → keep-alive
Content-Length → 183
Content-Type → text/xml
我查看了几个实现 HTTP 持久连接的 gem,但似乎没有一个能够处理这种情况。
你知道一些可以处理这种事情的宝石吗?否则,我不想从头开始重新发明实现 HTTP 客户端的轮子,因此最好的方案是将此功能集成到现有解决方案中。关于我应该如何进行的任何想法?
【问题讨论】:
-
您的意思是服务器在没有请求的情况下“推送”新响应吗?或者这只是一个长请求(那为什么会有
content-length?) -
您可以尝试使用纯 ruby 套接字:ruby-doc.org/stdlib-1.9.3/libdoc/socket/rdoc/Socket.html
-
没错,服务器开始推送响应。
-
@Axxiss - HTTP 协议是基于请求-响应模式的应用层协议,你不能使用 http 做你想做的事。您需要降级并使用 TCP 协议。 Ruby 套接字库对此非常有用 - 您可以使用 http 处理登录,并在成功时打开一个套接字。
-
什么是第 3 方服务?也许查看他们的文档将有助于清除它?
标签: ruby-on-rails ruby http