Идет загрузка огромного файла и передача клиенту (проксирование)

У меня небольшое приложение на основе Martini, и я столкнулся с проблемой, которую не могу решить.

Я хочу добавить функцию приложения, которая позволит пользователю получать файлы с 3-го сервера с некоторыми изменениями в заголовках HTTP. Какой-то прокси. Файлы довольно большие (200+ Мб каждый), и я хочу, чтобы эти файлы передавались клиенту. Под "потоком" я подразумеваю, что данные файла должны начать возвращаться клиенту сразу после того, как приложение получило первые байты, не сохраняя весь файл на диске и / или в памяти.

Это возможно с Мартини и Го?

1 ответ

Решение

Да, это вообще возможно с Go, я не очень знаком с Мартини. Ответ http от вызова удаленного файла возвращает Reader интерфейс, и ваш обработчик запросов имеет Writer интерфейс. Это означает, что вы можете читать поток данных и записывать поток данных. Возьмите на себя ответственность только за манипулирование тем, что вы хотите, и "исправьте" перенаправленный поток в поток запросов.

Иди даже есть ReverseProxy Утилита, встроенная в стандартную библиотеку:

http://golang.org/pkg/net/http/httputil/

Вы можете смешать Martini и стандартную библиотеку http, если хотите.

[EDIT] Читая документы martini, вы можете добавить необработанные обработчики http, как в стандартной библиотеке, то есть вы действительно можете это сделать: https://github.com/codegangsta/martini

Другие вопросы по тегам