2011-09-17 37 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

呵呵。那麼,我很高興你能工作。聽到代理服務器提出這個問題,我感到非常驚訝。 –