2011-09-17 1 views
0

첫째로 나는 이것이 블론드하게 명백하거나 단순하면 여전히 C++을 배우고 있다고 말할 필요가 있다고 생각합니다.libevent를 사용하여 연속 http 스트림을 읽고 랜덤 한 시간에 데이터 보내기

나는 C++ 프로그램에서 http 스트림을 사용하기 위해 libevent 라이브러리 (샘플 폴더의 코드를 살펴보고 일부를 테스트 해본 결과)를 사용하려고한다. 누군가가 나를 URL에 연결하는 방법에 대한 예를 제공 할 수 있는지 궁금합니다. live.domain.com, 적절한 헤더를 보내고 반환 된 데이터를 읽고 동일한 연결을 통해 데이터를 다시 보냅니다 ... libevent가 차단 연결을 수행하는 것은 확실하지 않지만 단지 명시 적이어야합니다. 견본.

왜 이렇게하려고합니까?

연결을 열어야하는 API를 사용 중이며 오류가 발생하지 않는 한 계속 유지합니다. 동일한 연결을 통해 ID가있는 문자열을 수신 할 때까지 주기적으로 연결된 클라이언트에 상태 텍스트를 보냅니다. 어느 시점에서 주어진 ID에 대한 데이터를 다시 보내기 시작합니다 ... 초기 요청이 엄격하게 준수 된 후에 동일한 연결을 통해 데이터를 다시 보내는 것은 확실하지 않지만 서버가 기대하는 바입니다. 나는 방법을 알고 있었다

고맙게 미리

+0

"동일한 연결을 통해 데이터를 다시 보냄"이 무슨 뜻인지 잘 모르겠습니다. 동일한 연결을 통해 두 번째 HTTP 요청을 보내는 것을 의미합니까, 아니면 이상한 비 HTTP 프로토콜 중류로 변경됩니까? –

+0

ID에 대한 메시지를 구독하기 위해 json 문자열이 중간에 다시 전송 될 것으로 예상합니다. 연결이 열려있는 동안 여러 개의 ID를 별도의 문자열로 보낼 수 있습니다. 기본적으로 초기 요청 만 HTTP를 따를 것으로 예상됩니다 (요청의 끝을 표시하기 위해 헤더와 새 줄 구분 기호를 보내야한다는 의미에서) 모든 후속 메시지는 프로그램과 서버간에 열린 원시 소켓이있는 경우와 거의 같습니다. 그들 사이에 임의의 문자열을 보내는 중 ... – zcourts

답변

0

Yuck. 이것이 HTTP가 아닌 것을 감안할 때 HTTP 라이브러리를 사용하면 행복하다고 생각하지는 않습니다. 많은 좌절감을 겪은 후에도 작동하게 되더라도 내일은 쉽게 망가질 수 있습니다. 지원되는 기능이 되기에는 너무 드뭅니다.

하지만 ... libevent로 원시 TCP 연결을 열고, HTTP 요청과 같은 종류의 것을 수동으로 보내고, 거기에서 원시 소켓으로 처리 할 수있을만큼 간단합니다. HTTP 라이브러리가 제공하는 추가 자료 (추가 전송/콘텐츠 인코딩, 프록시 지원, SSL, 다른 프로토콜 버전과의 호환성 ...)를 원하지 않습니다.

예를 들면, libevent book . 특히, "Trivial HTTP v0 클라이언트"는 원하는 것에 매우 가깝게 보인다. 행운을 빕니다!

+0

예, 결국 libevent를 떠났습니다. 내가 zeromq를 조사하고 있기 때문에 프록시 지원이 필요하다. 훨씬 더 잘 문서화되어있다. 나는 이미 내가 원하는 것을하고있다. – zcourts

+0

허. 네가 일하게되어 기쁘다. 나는 프록시 서버가이를 수용한다는 사실에 매우 놀랐다. –

관련 문제