Created
February 10, 2011 13:47
-
-
Save shirok/820526 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
;; ストリーミングの受け取り方 | |
;; httpレスポンスに対して呼ばれる。 | |
;; - code : httpステータスコード | |
;; - headers : レスポンスヘッダ ((name value) ...) | |
;; - total : レスポンス全体のサイズ。streamingの場合はわからないので#fになってるはず | |
;; - retrieve : レスポンスボディを受け取るための手続き。後述。 | |
(define (stream-receiver code headers total retrieve) | |
;; codeをチェック。200以外なら適切な処置を。 | |
(receive (port size) (retrieve) | |
;; portは入力ポートで、サーバからのレスポンスを読み出せる | |
;; sizeはこの時点で#fのはず | |
;; portから好きなだけデータを読んで処理。 | |
;; 終わりたくなったらもう一度retrieveを呼ぶ。 | |
(receive (port size) (retrieve) | |
;; この時sizeは0のはず。 | |
;; 適当に後始末をする。ここの戻り値がhttp-get等の戻り値になる。 | |
)) | |
;; http-get等の呼び出し時に:receiverキーワード引数でstream-receiverを渡す | |
(http-get "stream.twitter.com" :secure #t :receiver stream-receiver ...) | |
;; サーバのレスポンスの色々な返し方に対応できるように複雑になっていますが、ストリーミングと | |
;; わかってるならこれでいけるんじゃないかと思います。でも試してないので無保証。 | |
;; receiverのその他の動作モードについては lib/rfc/http.scmのhttp-string-receiverとかhttp-file-receiver | |
;; あたりを見るとわかるかも。 |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment