【问题标题】:using libevent to read a continuous http stream and sending data at random times使用 libevent 读取连续的 http 流并随机发送数据
【发布时间】:2011-11-19 10:42:00
【问题描述】:

首先,我想我需要说我还在学习 C++,如果这非常明显/简单,我深表歉意。

我正在尝试在我的 C++ 程序中使用 libevent 库(通过尝试查看示例文件夹中的代码并测试了一些)来使用 http 流。我想知道是否有人可以为我提供一个示例,说明我将如何连接到 URL,例如live.domain.com,发送适当的标头,读取返回的数据并通过同一连接发送回数据...... 我不确定 libevent 是否有任何阻塞连接,但为了明确起见,我正在寻找非阻塞示例。

我为什么要这样做?

我正在使用一个 API,它要求您打开一个连接并保持连接,除非出现错误。它会定期向连接的客户端发送状态文本,直到它通过同一连接接收到带有 ID 的字符串。此时它开始发回有关给定 ID 的数据...我不完全确定在初始请求严格符合之后通过同一连接发回数据,但这正是服务器所期望的,所以它会工作...如果我知道怎么做

提前致谢

【问题讨论】:

  • 我不确定您所说的“通过同一连接发回数据”是什么意思。你的意思是通过同一个连接发送第二个 HTTP 请求,还是这会变成一些奇怪的非 HTTP 协议中游?
  • 它期望一个 json 字符串被发送回中途以订阅一个 ID 的消息。您可以在连接打开时随时将多个 ID 作为单独的字符串发送。基本上只有初始请求应该遵循 HTTP(从某种意义上说,您发送标头和新行分隔符来标记请求的结束)任何后续消息几乎与您在程序之间打开原始套接字和在它们之间发送任意字符串...

标签: c++ sockets asynchronous libevent http-streaming


【解决方案1】:

哎呀。鉴于这不是真正的 HTTP,我认为您不会对使用 HTTP 库感到高兴——即使您在经历了很多挫折之后今天让它工作,明天它也很容易被破坏。这太罕见了,无法成为受支持的功能。

但是...听起来它也很简单,您可以使用 libevent 打开一个原始 TCP 连接,手动发送一些看起来有点像 HTTP 请求的内容,然后从那里使用原始套接字处理它。无论如何,您都不希望 HTTP 库为您提供额外的东西(额外的传输/内容编码、代理支持、SSL、与其他协议版本的兼容性......)

就示例而言,请查看libevent book。特别是,看起来非常接近您想要的“Trivial HTTP v0 客户端”。祝你好运!

【讨论】:

  • 是的,我最终独自离开了 libevent。我需要代理支持,所以我正在研究 zeromq,文档要好得多。我已经让它做我想做的事了
  • 嗯。好吧,我很高兴你让它工作了。听到代理服务器能忍受这一点,我感到非常惊讶。
猜你喜欢
  • 2018-01-31
  • 2016-01-11
  • 1970-01-01
  • 2010-12-08
  • 1970-01-01
  • 2016-01-12
  • 2016-11-12
  • 2023-03-28
  • 2021-09-06
相关资源
最近更新 更多