【问题标题】:Listen for multiple response produced by one HTTP request监听一个 HTTP 请求产生的多个响应
【发布时间】: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


【解决方案1】:

我们最终在eventmachine 之上构建了一个解决方案。 EM 允许我们在每次在连接上接收到一条数据时接收事件。然后将数据传递给http_parser.rb 以解析传入的http消息,最后我们将消息排入sidekiq。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-03
    • 2013-05-21
    • 1970-01-01
    • 1970-01-01
    • 2011-12-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多