2014-10-20 9 views
0

나는 어떻게 달릴 수 MyDaemon.php TideSDK app에있는 배경에?TideSDK - 백그라운드에서 MyDaemon.php를 실행하는 방법 (비동기)?

MyDaemon.php - 내 완전히 준비된 콘솔 소프트웨어 (많은 코드, 다른 PHP 스크립트 실행, 다른 소프트웨어 실행 등)입니다. 그것은 끝없는 PHP 스크립트. 그것은 TideSDK APP 이후 시작해야하고 종료 전 모든 시간 동안 (사용자가 앱을 닫지 않은 상태에서) 살아 있어야합니다. TideSDK 표시 상태는 MyDaemon.php이며, 제어 할 수있는 버튼이 거의 없습니다.

문제 1 : "/ 조류에서/경로 /로/php에"쓸 무엇

Ti.Process.createProcess("?path/to/php/from/tide? -f MyDaemon.php"); 

:가 어떻게에 MyDaemon.php 시작할 수 있나요? 내 사용자의 대상 컴퓨터에 PHP 패키지가 없습니다. TideSDK에서 콘솔 모드처럼 PHP를 실행하고 싶습니다. 필자는 TideSDK Developer에서 PHP 기능을 포함하고 "Runtime with Package"버튼을 사용합니다. 나는 TideSDK 내의 모든 파일을 찾았지만, "php"(파일 실행), libs 만있는 것은 아무것도 없다.

문제 2 : 나는

< iframe width=0 height=0 src="MyDaemon.php"></ iframe> 

을 사용하려고하지만 프레임에서 전체 소스를 취할 수 없기 때문에 TideSDK은 UI APP를 시작할 수 없습니다. MyDaemon.php은 끝이 없습니다. 어떻게하면 < IFRAME>에 포함시킬 수 있습니까? ASYNC 모드는 실제 브라우저와 유사합니까? (UI APP 시작하지만,이 프레임을 실행 후 중단)

<iframe width=0 height=0 src="" name="php">< /iframe> 
<script>setTimeout("frames.php.location.href=MyDaemon.php", 1000)</ script> 

그러나 너무 작동하지 않을 것 :

나는이 트릭을 사용하려고합니다.

MyDaemon.php는 TideSDK APP와 어떤 방식으로 통신 할 수 있습니다 :

  1. 시작 "MyDaemon.php -f/빈/PHP는"/ 쓰기 표준 입력/표준 출력을 참조하십시오. MyDaemon.php는 JSON 형식의 명령을 stdout에 쓸 수 있습니다. 에
  2. 시작 MyDaemon.php 및 < 스크립트를 표준 출력하도록 작성> 티 ... [명령] </script> - TideSDK
  3. 대한 직접적인 JS 코드 file1에 및 파일 2로부터 판독하기 위해 어떤 MSG 물품 (TideSDK가 읽을/쓰기) 실행
  4. SQLite DB에 모든 메시지 쓰기 (TideSDK는 JS 코드에서 DB를 읽음) 다른 방법.

중요 : MyDaemon.php 다른 PHP 파일로 시작하고 싶습니다! 첫 번째 프로세스는 매우 긴 작업을 계산하기 위해 많은 수의 하위 작업을 실행하기 때문입니다. TideSDK에게이 아이들을 시작하도록 요청하고 MyDaemon.php에서 "exec (/ bin/php -f second.php)"를 사용하지 마십시오.

그러나 TideSDK APP에는 이미 가지고 있기 때문에 이중 PHP 바이너리를 내 APP에 포함하고 싶지 않습니다! dist에 많은 공간이 있습니다.

내 언어로 죄송합니다.

답변

0

당신이 사용하고있는 명령의 출력을받을 수있는 Ti.Process.CreateProcess() 함수를 사용해야한다고 생각합니다. (저는 PHP가 아닌 JS 구문을 사용하므로 필요하지 않습니다. 명령을 실행하거나

  • 이 먼저 명령에 cmd 또는 쉘 명령을)/읽기 작업을 작성하는 별도의 라이브러리를 포함, 당신은 모든 세트를 보낼 필요가 다음 "LS -la/www가"
  • 을 말할 수 var cmd = [ "ls", "-la", "/ www"]
  • 그런 다음 Ti.Process.CreateProcess()를 사용하여 var에 전달합니다. var echo = Ti.Process.CreateProcess cmd);
  • 출력을 얻으려면 내용을 다른 명령 집합으로 파이프 아웃 할 수 있습니다.

최종 프로그램은 다음과 같아야합니다

var cmd = ["ls","-la","/www"]; 
var echo = Ti.Process.CreateProcess(cmd); 
echo.setOnReadLine(function(data) { 
    console.log(data); 
}); 

echo.setOnExit(function(data){ 
    console.log('process ended'); 
    console.log(data) 
}); 

echo.stdout.attach(echo.stdin); 
echo.launch(); 

대신 CONSOLE.LOG, 당신의 DIV에 명령 출력 밖으로 당신이 파이프 할 수 있습니다.

또한 main.html 외에도 다른 스크립트를로드 할 수 없습니다. TideSDK는 url을 통해 도메인에 액세스하는 도메인 내부의 보조 페이지에 접근 할 수있는 웹 기반의 구조화 된 플랫폼이 아닙니다 (app : //main.html 만로드 할 수 있으며 다른 페이지를 호출 할 수있는 행운이 없었습니다) "), 대신 메인 페이지 내부의 요소를로드하도록 앱을 모듈화하십시오.

지금은 데몬을 만드는 것이 위험합니다. 내용을 새로 고치는 방법에 따라 CPU 사용량을 개별적으로 증가시킬 수 있다는 점을 알아야합니다.

위의 내용을 사용하여 쉘 명령에 javascript 루프를 사용하도록 제안 할 수 있습니다. TideSDK가 특정 확장 기능을 제공 할 수 있기 때문에 실제 "데몬"또는 보조 스크립트가 필요하지 않습니다. TideSDK