2010-05-10 2 views
2

글쎄, 그 질문이 그만큼 큰 것은 아닙니다. 시나리오를 설명해 드리겠습니다. 두 개의 http 서버가 있습니다. 서버 A는 웹 브라우저를 통해 최종 사용자가 액세스 할 수 있지만 서버 B는 서버 A 만 액세스 할 수있는 내부 서버입니다. 서버 B가 로컬 디스크에 큰 jpeg 이미지를 생성하고 서버 A가 서버 B의 파일 시스템에 직접 액세스 할 수있는 방법이없는 경우 , 서버 A에 일시적으로 해당 이미지 데이터를 저장하지 않고 최종 사용자가 해당 이미지를 볼 수있게하는 방법은 무엇입니까?여러 http 서버를 통해 이진 데이터를 전송하는 방법은 무엇입니까?

서버 A에서 PHP를 실행하고 서버 B에서 Perl을 실행하지만 이것은 중요하지 않습니다. 이것을 구현하기위한 일반적인 패턴이 필요합니다.

+0

여기서 누락 된 마술 단어는 "프록시"입니다. – Ether

답변

3

분명히 우리는 이미지에 대한 경로를 서버 A와 최종 사용자에게 배달 할 수 없습니다.

나는 그것이 유일한 방법이라고 생각하지만 실제로 서버 A에 파일을 저장할 필요가 없습니다. PHP에서 : 서버 A가 파일 시스템 레벨에서 서버 B와 통신 할 수 있다면 (예 : 네트워크 공유), 서버 A는 서버 B에서 데이터를 가져 와서 사용자에게 통과 수 : 단지 내부 HTTP 연결이있는 경우

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); 

, 당신은

$file = fopen("http://serverb.local/huge/image.jpg", "r"); 
처럼 뭔가 2 라인을 바꿀 것 이 메서드가 너무 느린 경우

당신이나 당신이 설치하기 편리하지 않다면, 당신은 (S) FTP, SCP 또는 비슷한 것을 사용해야 할 것입니다. FTP는 PHP natively에서 사용할 수 있습니다. 다른 프로토콜은 exec()을 사용하여 PHP 스크립트에서 호출하는 것이 가장 쉽습니다.

시나리오 및 사용 빈도에 따라 서버 A에서 일종의 캐싱을 사용하여 매번이 작업을 반복하지 않아도됩니다.

서버가 데이터 센터에서 호스팅되는 경우 이들 사이의 트래픽이 무료이거나 너무 비싸지 않은지 확인하십시오.

이 나는 ​​사용자가 서버 A를 막힘없이 이미지 "를 참조하십시오"수 있도록 생각할 수있는 leanest 방법입니다

당신이 얼마나 많은 컨트롤과 얼마나 격리 된 서버 따라 솔루션의 숫자가있다
+0

이것은 주어진 제약 조건 내에서 올바른 해결책입니다. 단지 당신이 내부 공유를 읽을 수있는 네트워크 공유가 필요 없다고 덧붙이고 싶었습니다. 그래서 $ file = fopen ('http : //mySeverBIp/hugeImage.jpg')도 작동합니다. – elviejo79

+0

@elviejo : 죄송합니다. "myServerBlp"란 무엇입니까? – solotim

+0

@ solotim @elviejo를 제대로 이해했다면 서버 B의 IP입니다. 시나리오 (시나리오에 따라 유일한 방법 일 수도 있습니다)가 제대로 작동하지만 HTTP 전송 프로토콜을 사용합니다. 나는 HTTP가 네트워크 공유로 직접 작업하는 것보다 서버 B에서 느려지고 긴장 될 것이라고 생각한다. –

0

B는 서버 A에서 온 것입니다.

서버 B가 서버 A와 공유하는 네트워크 볼륨에 이미지를 생성하는 한 가지 방법은 서버 A에 약간의 보안을 제공하기위한 읽기 전용 액세스 권한이 있어야합니다. 그런 다음 서버 A는 해당 파일에 직접 액세스 할 수 있습니다. 여분의 오버 헤드가 네트워크 드라이브이므로 서버 A에서 통과 프로그램을 작성하는 것보다 더 빠른 속도를 낼 수 있으며 서버 B가 서버 A와 완전히 분리 된 상태로 유지 될 수 있습니다.

서버 A는 서버 B가 이미지를 생성하도록 요청할 필요가 없습니다.

+0

고맙습니다. 나는 내 질문을 업데이트합니다. 죄송합니다. 서버 A는 서버 B의 파일 시스템에 액세스 할 수 없습니다. – solotim

+0

서버 B의 실제 디스크가 아니라 네트워크 드라이브가 A와 B 모두에서 볼 수 있습니다. 실제로 서버 A가 서버 B의 연결을 수락 할 수 있다고 가정하면 서버 A의 공유 볼륨이 될 수 있습니다. – Schwern

관련 문제