2011-09-17 160 views
0

首先我想我需要说我仍然在学习C++所以道歉,如果这是非常明显/简单。使用libevent阅读一个连续的http流并随机发送数据

我想在我的C++程序中使用libevent库(通过尝试查看示例文件夹中的代码并测试了一些代码)以使用http流。我想知道是否有人能为我提供一个关于如何连接到URL的例子live.domain.com,发送适当的头文件,读取返回的数据并通过相同的连接发回数据... 我不确定libevent是否执行任何阻塞连接,但只是为了明确,我是在非阻塞样本。

我为什么要这么做?

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

在此先感谢

+0

我不确定“通过同一连接发回数据”是什么意思。你的意思是通过同一个连接发送第二个HTTP请求,或者这是否会变成奇怪的非HTTP协议中游? –

+0

它期望一个json字符串在中游发送回订阅一个ID的消息。您可以在连接打开时随时将多个ID作为单独的字符串发送。基本上只有最初的请求需要跟在HTTP之后(因为你发送头和新的行分隔符来标记请求的结束)任何后续的消息几乎都是一样的,就好像你在程序之间打开了一个原始套接字,发送它们之间的任意字符串... – zcourts

回答

0

Yuck。鉴于这不是真正的HTTP,我认为你不会很高兴使用HTTP库 - 即使你在经历了很多挫折之后今天才开始工作,它可能很容易在明天被打破。这太罕见了,无法成为支持的功能。

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

举例来说,看看libevent book 。特别是,“Trivial HTTP v0客户端”看起来非常接近你想要的。祝你好运!

+0

是的,我最终离开了libevent。尽管我需要代理支持,但我正在研究zeromq,它的记录要好得多。我已经做到了我想要的 – zcourts

+0

呵呵。那么,我很高兴你能工作。听到代理服务器提出这个问题,我感到非常惊讶。 –