Swift Vapor フレームワークを調べています。
SSL リンクで取得したデータをサード パーティのシステム (Asterisk PBX サーバー..) にマップするコントローラー クラスを作成しようとしています。応答本文は、クライアントに送信されます。
したがって、「完全な応答」が構築されるのを待たずに、受信したテキスト行 (SSL 接続で個別に取得) を受信時に送信する必要があります。
この例を見ると:
return Response(status: .ok) { chunker in
for name in ["joe\n", "pam\n", "cheryl\n"] {
sleep(1)
try chunker.send(name)
}
try chunker.close()
}
それが道なのかもしれないと思いました。
しかし、Vapor サーバーに接続していると、REST 呼び出しがループの完了を待ってから、結果として 3 つの行が受信されることがわかります。
最初にループが完了するのを待たずに、chunker.send(name) の文字をクライアントに送り返すようにするにはどうすればよいですか?
実際のコードでは、コントローラー メソッドは、クライアントへの HTTP 接続を長時間開いたままにして、アスタリスク アクティビティ データを取得するとすぐにクライアントに送信する可能性があります。したがって、各 .send(name) は実際には、最後の .close() 呼び出しを待たずに、すぐにデータをクライアントに渡す必要があります。
try chunker.flush() を追加しても、より良い結果は得られませんでした..