5

チャンクされた HTTP 応答を使用してクライアントにデータをストリーミングする clojure Web アプリを作成しています。を使用してローカルで実行するとforemanうまく動作しますが、Heroku にデプロイすると正しく動作しません。

この動作を示す最小限の例は、私の github here にあります。フロントエンド ( resources/index.html) は AJAX GET 要求を実行し、応答チャンクが到着すると出力します。サーバーは http-kit を使用して、接続されたクライアントに毎秒新しいチャンクを送信します。設計上、HTTP 要求は決して完了しません。

同じコードが Heroku にデプロイされると、最初のチャンクが送信された直後に HTTP 接続がサーバーによって閉じられます。この切断が発生する原因となっているのは、Heroku のルーティング メッシュのようです。

これは、curl を使用して GET リクエストを実行することでも確認できます。

$ curl -v http://arcane-headland-2284.herokuapp.com/stream
* About to connect() to arcane-headland-2284.herokuapp.com port 80 (#0)
*   Trying 54.243.166.168...
* Adding handle: conn: 0x6c3be0
* Adding handle: send: 0
* Adding handle: recv: 0
* Curl_addHandleToPipeline: length: 1
* - Conn 0 (0x6c3be0) send_pipe: 1, recv_pipe: 0
* Connected to arcane-headland-2284.herokuapp.com (54.243.166.168) port 80 (#0)
> GET /stream HTTP/1.1
> User-Agent: curl/7.31.0
> Host: arcane-headland-2284.herokuapp.com
> Accept: */*
> 
< HTTP/1.1 200 OK
< Content-Type: text/html; charset=utf-8
< Date: Sat, 17 Aug 2013 16:57:24 GMT
* Server http-kit is not blacklisted
< Server: http-kit
< transfer-encoding: chunked
< Connection: keep-alive
< 
* transfer closed with outstanding read data remaining
* Closing connection 0
curl: (18) transfer closed with outstanding read data remaining
The time is currently Sat Aug 17 16:57:24 UTC 2013 <-- this is the first chunk

なぜこれが起こっているのか誰にも示唆できますか?HTTP ストリーミングは、Heroku の Cedar スタックでサポートされるはずです。を使用してコードが正しく実行されるという事実はforeman、Heroku のルーティング メッシュの何かが壊れていることを示唆しています。

失敗したプロジェクトのライブ デモ: http://arcane-headland-2284.herokuapp.com/

4

2 に答える 2

1

これはhttp-kit のバグによるもので、まもなく修正される予定です。

于 2013-09-14T00:03:15.380 に答える