Я изучаю структуру Swift Vapor.Как создать тело ответа с асинхронно созданными кусками тела в 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 ожидает завершения цикла, прежде чем три строки будут получены в результате.
Как я могу получить, чтобы попробовать chunker.send (имя) отправить свои символы обратно клиенту, не дождавшись завершения цикла?
В реальном коде метод контроллера потенциально может поддерживать HTTP-соединение с клиентом открытым в течение длительного времени, отправляя данные активности Asterisk клиенту, как только он будет получен. Поэтому каждый .send (name) должен фактически передавать данные клиенту, не дожидаясь окончательного вызова .close().
Добавление попробовать chunker.flush() не производит никакого лучшего результата ..
Hi! Спасибо за ваше примечание. Я обнаружил, что на самом деле работает. Просто Лау и Постман не были достаточно любезны, чтобы показать бегущий поток сигналов. – aaberga
Safari, otoh, показывает все так, как бывает. И, да, веб-сокеты имеют больше смысла в этом приложении. Но прямо сейчас я просто искал что-то быстрое, чтобы проверить SSL-сокет, который Vapor предлагает бесплатно (на самом деле подключиться к Asterisk в безопасном стиле telnet ссылки). – aaberga
Как сумасшедший, как это звучит (HTTP не там, чтобы это сделать ...) Я смог получить вызов GET, продолжающийся более часа, чтобы поток данных SSL с удаленной УАТС был проксирован на веб-страницу Safari. Разумеется, реальная вещь переместится на websockets! Но спасибо за все лакомства внутри Vapor !! – aaberga