Я нашел сообщения, похожие на то, что я хочу сделать, но ничего точного, поэтому прошу прощения, если я пропустил это, и здесь уже есть ответ. Кроме того, я инженер C ++, но новичок в PHP и без особого опыта работы с сетями и HTTP-запросами.
Вот что я надеюсь сделать. У меня есть сервер Linux, на котором работает PHP, на котором размещен API-интерфейс restful для доступа клиентов. Клиенты имеют собственную аутентификацию для доступа к API, и они могут загружать файлы, используя его. Затем мне нужно взять эти файлы и отправить их на внешний сервер, используя мои личные данные аутентификации. Я могу легко настроить это так, когда я получаю POST, я создаю новый HTTP-запрос, чтобы отправить его на свой частный сервер, а затем вернуть результаты обратно клиенту.
Вопрос в скорости. Файлы могут быть довольно большими, поэтому клиенту придется ждать загрузки файла дважды, прежде чем получить ответ. Одно из решений, которое у меня есть, — это немедленно отправить ответ клиенту, а затем заставить клиента пинговать сервер каждые x секунд, чтобы проверить состояние дополнительной загрузки. Это позволило бы мне быстрее получить ответ клиенту, но не идеально. Я надеялся, что есть более продвинутое решение: есть ли способ начать вторичную загрузку на моем сервере, как только я начну получать загрузку, чтобы к моменту завершения загрузки на мой сервер загрузка на вторичный сервер? сервер будет почти завершен. Это все должно быть достигнуто с помощью POST, так что я не знаю, является ли это ограничивающим фактором в уравнении.
Возможно ли что-то подобное? Если да, то как бы вы порекомендовали это сделать?
Другой вариант может заключаться в том, чтобы клиент напрямую загружал на вторичный сервер, но как это было бы возможно без предоставления моей личной аутентификации. Имейте в виду, что вторичный сервер — это просто спокойный API, который принимает сообщения с использованием ключа API и токена для аутентификации.
Это сложный вопрос. Если бы у вас был FTP-доступ на вторичном сервере, мы могли бы получить немного большую скорость в конечном итоге.
Насколько я знаю, вы не можете начать отправку дополнительной загрузки одновременно с получением файла. Во время загрузки файла он находится во временной папке до тех пор, пока запрос не будет завершен, и только после этого он перемещается в какую-то доступную папку. Но, эй, я не уверен на 100%, что это вообще невозможно.
Текущее решение кажется мне лучшим: получить файл, сообщить пользователю, загрузить на вторичный сервер, сообщить пользователю, если оно завершено. Связь между серверами обычно довольно быстрая, поэтому вторичная загрузка должна занимать меньше времени, чем первая.
Последний вариант, на данный момент, это нет нет. Я не могу придумать способ загрузки непосредственно на вторичный сервер, не раскрывая ваши учетные данные.
Спасибо вам, ребята. Похоже, я застрял с возможностью возврата результата клиенту после завершения загрузки, а затем запускаю вторичную загрузку, в то время как клиент пингует главный сервер, чтобы проверить его состояние. Я думаю, что все должно быть в порядке, так как на данный момент я ограничен PHP.
ура