2010-12-11 7 views
0

나는 웹 서버를 구축하는 파이썬의 BaseHTTPRequestHandler 클래스를 사용하고 있습니다. WebSockets에 엔드 포인트를 추가하려고합니다. 이것은 내가 하나 하나 메시지를 처리 ​​할 수 ​​있도록 내가 (대신하면서 입력을 읽을 필요없이)을 받고있어 나는이 핸들러의 rfile에서 사용할 수 있습니다 무엇이든 읽을 필요가 있다는 것을 의미한다.파이썬, BaseHTTPRequestHandler : 어떻게 소켓에서 파일을 볼 수 있습니다 무엇을 읽을?

'읽기'(예 : 큰 버퍼를 사용하여 데이터를 더 적게 사용하면 데이터를 적게 사용한다고 가정하고 매개 변수가 없지만 EOF까지 읽는 것을 의미합니다) 그러나 이것을 작동시키지 못했습니다.

나는 두 가지 솔루션을 생각할 수 있습니다 : 하나 바이트를 읽어 :

  • (1) 읽기 호출합니다. 나는 버퍼링 의미 (예. 내가 바이트 읽기 당 콜을 원하지 않는 것)이 무엇인지 확실하지 않다 나는 오히려,이 작업을 수행 할 것입니다.

  • 일시적으로 파일 비 차단, 그럼 다음 1 바이트의 읽기를 시도 후 차단하게, 데이터의 덩어리에 대한 읽기를 시도 할 수 있도록합니다. 이것은 다소 혼란스러워 보입니다. 내가 생각할 수있는 또 다른 옵션은 비 블로킹 소켓을 사용하는 것이지만, 현재의 스레드 된 프레임 워크에서는 그렇게 잘 작동하지 않는 것 같습니다.

어떤 아이디어라도 얻을 수있는 데이터를 얻으려면 어떻게해야합니까?

답변

1

WebSocket을은 HTTP하지 않습니다, 그래서 당신은 정말 HTTP 요청 처리기로 처리 할 수 ​​없습니다.

그러나, HTTP와 BaseHTTPRequestHandler를 사용하여, 당신은 일반적으로 단지 당신이 (예를 들어, 콘텐츠 길이 헤더에 지정된대로.)

을 기대하는 데이터의 정확한 금액을 읽는 것
관련 문제