2012-03-15 1 views
2

PHP로 다양한 원격 클라이언트와 통신 할 수있는 작은 서버 데몬을 개발 중입니다. 그러나 동일한 시스템에서 실행중인 다른 데몬은 가능한 한 빨리 첫 번째와 통신해야하지만 수십 KB의 데이터를 지속적으로 전송할 수 있습니다 (잘하면 20 HTZ 이내). 나는이 두 가지 데몬 사이에 TCP 연결을 사용하고 싶지만 꽤 충고한다. 지금 당신이 물어보기 전에, 두 번째가 java, .net, C++, python, ruby ​​등 여러 언어들 중 하나에서 쓰여질 것이기 때문에 제가 둘을 동일한 데몬으로 단순히 결합 할 수없는 이유가 있습니다. PHP를 tcp 연결을 사용하지 않고 (또는 내 필요에 맞지 않는 시스템 호출을 사용하여) 다른 언어로 말하게하고 성능을 희생시키지 않으면 나는 모든 귀가지만 이것을하기위한 방법을 찾고있다. 정말 깨끗하고 단순한 방법을 찾을 수는 없습니다. 적어도 "하나는 모든 것을 만족시키는"패션이 아닙니다.PHP 데몬과의 대화

+1

유닉스 도메인 소켓은 항상 TCP보다 빠릅니다. 로컬 전용 통신에는 tcp를 사용하지 마십시오. –

답변

2

다른 프로세스가 동일한 시스템에있을 것이므로 proc_open()을 사용하는 경우 생성 된 파이프 (stdin/stdout 등)에서 작성/읽습니다.

system()/popen() 콜과 비슷하지만 다른 프로세스를 읽고 쓸 수 있으며 물론 TCP 소켓의 오버 헤드는 피할 수 있습니다.

+0

굉장! 한번 시도해 보겠습니다. 단일 쓰기/읽기 작업에서 1MB 정도의 데이터를 처리한다고해도 제대로 작동 할 것이라고 생각하십니까? – Xealgo

+1

@Xealgo 예, 문제 없습니다 - UNIX 소켓 (파이프)을 통한 통신은 매우 빠릅니다. –

1

소켓을 사용할 수 있습니다. PHP는 소켓 구현을 가지고 있습니다 : http://www.php.net/manual/en/ref.sockets.php

저는 C로만 소켓 프로그래밍을했지만, 나열된 다른 언어들 대부분은 소켓으로 잘 작동 할 수 있어야합니다.

PHP에서는 socket_bind()을 사용하여 소켓에 연결합니다. 마찬가지로 다른 데몬에서 동등한 작업을 수행해야합니다.

+0

나는 이미이 일을 조금 해왔지만, 어쨌든 당신 덕분에 감사합니다! – Xealgo

관련 문제