Как передать двоичные данные через несколько http-серверов? - PullRequest
2 голосов
/ 10 мая 2010

Ну, вопрос не должен быть таким большим. Позвольте мне объяснить сценарий: у меня есть два http-сервера. Сервер A доступен для конечного пользователя через веб-браузер, в то время как сервер B является внутренним сервером, к которому может обращаться только сервер A. Если сервер B генерирует большое изображение в формате JPEG на локальном диске, а сервер A не имеет доступа к файловой системе сервера B напрямую Как разрешить конечному пользователю просматривать эти изображения, не предварительно временно сохранив эти данные изображения на сервере А?

Я запускаю PHP на сервере A и Perl на сервере B, но это не должно иметь значения. Мне нужен общий шаблон для реализации этого.

Ответы [ 2 ]

3 голосов
/ 10 мая 2010

очевидно, что мы не можем просто доставить этот путь к изображению на сервер А и в конечном итоге к конечному пользователю.

Я думаю, что это единственный путь, но вам не нужно физически сохранять файлы на сервере A. В PHP: если сервер A может общаться с сервером B на уровне файловой системы (то есть через общий сетевой ресурс), сервер A может получить данные с сервера B и передать их пользователю:

header("Content-type: image/jpeg"); // Make sure you send the right headers
$file = fopen("/path/to/server/b/huge/image.jpg", "r");
fpassthru($file);  // or deliver chunks using fread()
fclose($file);

Если есть только внутреннее http-соединение, вы изменили бы вторую строку на что-то вроде

$file = fopen("http://serverb.local/huge/image.jpg", "r");

Если этот метод слишком медленный для вас или не удобен в настройке, вам придется использовать (S) FTP, SCP или что-то подобное. FTP доступен на PHP изначально ; другие протоколы, вероятно, проще всего вызвать из скрипта PHP, используя exec().

В зависимости от вашего сценария и частоты использования может потребоваться использовать какое-либо кэширование на сервере A, чтобы эту операцию не приходилось повторять каждый раз.

Если ваши серверы размещены в центре обработки данных, убедитесь, что трафик между ними бесплатный или не слишком дорогой.

Это самый простой способ, с помощью которого я могу позволить пользователю «увидеть» изображение без засорения сервера A.

0 голосов
/ 10 мая 2010

Существует несколько решений, в зависимости от того, насколько у вас есть контроль и насколько изолирован сервер B от сервера A.

Один из способов заключается в том, чтобы сервер B генерировал образы на сетевом томе, совместно используемом с сервером A. Сервер A имел бы доступ только для чтения, чтобы обеспечить немного безопасности. Затем сервер A может напрямую обращаться к рассматриваемым файлам. Преимущества по сравнению с написанием сквозной программы на сервере A, скорее всего, будут быстрее, поскольку единственными дополнительными затратами являются сетевой диск и это позволяет серверу B оставаться полностью изолированным от сервера A.

Это предполагает, что серверу A не нужно запрашивать, чтобы сервер B генерировал изображения, что они просто там.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...