TideSDK - 如何在后台运行MyDaemon.php(异步)?

时间:2014-10-20 12:21:10

标签: tidesdk

如何在TideSDK应用程序的后台运行 MyDaemon.php

MyDaemon.php - 这是我完全准备好的控制台软件(很多代码,运行其他我的PHP脚本,运行其他软件等)。这是无尽的PHP脚本。它必须在TideSDK APP之后启动并在退出前一直处于活动状态(用户不关闭应用程序)。 TideSDK显示来自 MyDaemon.php 的状态,并且几乎没有按钮来控制它。

问题1:如何在 MyDaemon.php 中启动

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

在“path / to / php / from / tide”中写什么?我的用户的目标计算机没有php包。我想从TideSDK运行php,如控制台模式。我在TideSDK Developer中包含了PHP功能和使用“Run with Runtime”按钮。我查找了TideSDK中的所有文件,但没有像“php”(执行文件),只有libs。

问题2:我尝试使用

< iframe width=0 height=0 src="MyDaemon.php"></ iframe>
但是TideSDK无法启动UI APP,因为无法在帧中获取FULL源。 MyDaemon.php 是没有用的。我怎样才能包含&lt; IFRAME&gt; ASYNC 模式下,就像真正的浏览器一样?

我尝试使用这个技巧:

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

但它也不起作用(UI APP启动,但在执行此帧后暂停)。

MyDaemon.php 可以任何方式与TideSDK APP沟通:

  1. 启动“/ bin / php -f MyDaemon.php”并读/写stdin / stdout。 MyDaemon.php可以写入stdout任何JSON格式的命令。
  2. 启动MyDaemon.php并写入stdout&lt;脚本&GT;钛... [命令]&LT; /脚本&GT; - TideSDK的任何直接JS代码
  3. 将任何msg写入file1并从file2读取(TideSDK将在那里读/写并执行)
  4. 将任何msg写入SQLite DB(TideSDK将在JS代码上读取DB) 任何其他方式。
  5. 重要的是: MyDaemon.php 想要在控制台中启动其他php文件!因为第一个过程运行了很多孩子来计算很长的任务。我可以要求TideSDK开始这个孩子,不要在 MyDaemon.php 中使用“exec(/ bin / php -f second.php)”。

    但是我不想在我的APP中加入双PHP二进制文件,因为TideSDK APP已经拥有它了!在dist中有很多额外的空间。

    谢谢,对不起我的语言。

1 个答案:

答案 0 :(得分:0)

我认为你应该使用Ti.Process.CreateProcess()函数,你可以在这里接收你正在使用的命令的输出(我使用的是JS语法,而不是php,所以我不需要包含额外的库来执行命令或写/读操作)

  • 首先你有一个命令cmd或shell命令,让我们说“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不是一个基于Web的结构化平台,你可以通过url访问域内的二级页面(比如app://main.html是唯一一个要加载的页面,试过没有运气来调用其他页面) “),而是模块化您的应用程序以加载主页面内的元素。

现在,在这里创建守护进程是一种风险。您需要注意,根据您刷新内容的方式,它可以分别增加CPU使用率。

我建议你使用上面写的内容对shell命令使用javascript循环。你不需要真正的“守护进程”或辅助脚本,因为TideSDK可以提供TideSDK内部的某些扩展