2013-01-20 2 views
1

문제 : 나는 서버 측에서 실행되는 자바 스크립트는 클라이언트 측에서 실행되는 프로그램 사이에 앞뒤로 다시 등을 할 수 있는지 확인하기 위해 노력하고있어자바 스크립트 앞뒤로 실행중인 프로그램과

. 프로그램의 모든 출력은 사용자에게 표시되도록 JavaScript로 보내지고 사용자의 모든 입력은 JavaScript에서 프로그램으로 전송됩니다.

JavaScript를 사용하면 AJAX로 쉽게 출력을 보낼 수 있습니다. 문제는 서버에서 이미 실행중인 프로그램에 액세스하는 방법을 모르겠다는 것입니다.

시도는 :

내가 PHP를 사용하려고하지만 난 이상 도약하지 수있는 몇 가지 장애물에 달렸다. 이제 proc_open을 사용하여 아무 문제없이 PHP로 프로그램을 실행할 수 있습니다. stdinstdout 스트림에 연결할 수 있으며 프로그램에서 출력을 가져 와서 입력을 보낼 수도 있습니다. 하지만 한 번만 할 수 있습니다.

동일한 PHP 스크립트가 다시 실행되면 (?) 다시 프로그램이 실행됩니다. 따라서 여러 번의 사형에서 벗어나면 프로그램이 무엇이든 stdout에 여러 번 쓰게됩니다.

바로 지금 실행중인 프로그램의 stdoutstdin 스트림에 액세스하는 방법을 모르기 때문에 지금은 입력 및 출력 만 처리하도록되어있는 스크립트에서 proc_open을 사용합니다. 내가 본대로, 나는 동일한 PHP 스크립트의 여러 번 실행에 대한 실행에서 내 프로그램의 상태를 유지해야한다. 리소스proc_open으로, pipesstdinstdout 개의 스트림으로 연결되어야합니다.

$_SESSION이 작동하지 않습니다. 자원을 유지하는 데 사용할 수 없습니다.

프로그램과 함께 이러한 방법을 사용할 수 있습니까? 어떤 도움이라도 대단히 감사합니다.

답변

3

websockets

난 항상 것은 이러한 유형의 노드를 사용했습니다 http://socketo.me/ 또는 http://code.google.com/p/phpwebsocket/

같은 시도에 대한 작업처럼 들리 겠지만 위의 두 링크와 몇 가지 다른에서, 그것은 본다 PHP를위한 옵션도 있습니다.

+0

그는 클라이언트/서버 통신에 ajax를 사용하는 것이 좋습니다라고 언급했습니다. 나는 그가 PHP와 같은 서버 측 언어가 proc_open과 같은 것으로 계속 실행되는 프로세스 "프로그램"과 지속적으로 통신 할 수있는 방법을 찾고 있다고 생각한다. 물론 모든 로직을 websocket 또는 혜성 솔루션으로 대체 할 수는 있지만 서버에서 실행중인 다른 프로세스와 '이야기하고 싶다'는 것 같았습니다 ... –

0

더 효율적인 방법이 있지만 프로그램에 텍스트 파일로 출력하고 PHP에서 해당 텍스트 파일의 내용을 읽을 수 있습니다. 그렇게하면 실행중인 프로그램의 전체 데이터 스트림에 액세스 할 수 있습니다. 파일 크기를 관리하고 여러 클라이언트의 요청을 처리하는 데는 문제가 있지만 사용자의 요구에 충분히 부합하는 간단한 방법입니다.

0

PHP가 작동하는 방식이므로 동일한 프로그램을 다시 실행하고 있습니다. 귀하의 경우 클라이언트는 HTTP 요청을하고 스크립트를 실행합니다. 두 번째 요청은 스크립트를 다시 실행합니다. 지속적인 상호 작용이 가능한지 확실하지 않으므로 스크립트를 개별 트랜잭션을 처리 할 수있게 만들 것을 제안합니다.

동일한 "상호 작용"의 다른 단계를 파악하려면 이전 데이터에 대한 데이터를 데이터베이스에 저장해야합니다.기본적으로 모든 클라이언트에 고유 한 해시를 제공하여 스크립트에서 식별 할 수 있어야합니다. 그런 다음 요청을 수행 한 사용자를 확인하고 다른 사용자의 요청에서 한 사용자의 연속 요청을 다를 수 있습니다.

스크립트가 무거 우며 오랫동안 실행되는 경우 두 개의 스크립트 (하나는 무겁고 하나는 상호 작용할 스크립트)를 만드는 것을 고려하십시오 (AJAX는 두 번째 스크립트를 쿼리합니다). 이 경우 두 번째 스크립트는 데이터를 데이터베이스에 채우고 무거운 스크립트는 간단히 거기에서 가져옵니다.