PHP线程告诉JavaScript将睡眠

时间:2016-08-05 10:13:54

标签: javascript php ajax multithreading pthreads

标题有点混乱,但我的问题是:
Javascript对PHP控制器执行AJAX请求。在PHP控制器中,创建并启动了一个线程。代码是:

public function run() {
    while(true) {
        //Do Something...
        //Know I want to tell Javascript that I have done the thing and I'm going to sleep.
        sleep(10000);
    }
}

所以JavaScript代码是:

$.ajax({
 type: 'POST',
 url: "controllers/DatabaseController/",
 data: dataObject,
 success: function(response) {
   //Do Something after the Thread Result
 }
});

我认为这个问题是不可能的......因为线程在客户端设置的时间之后运行并休眠。当线程运行时,客户端需要查看线程的结果。

我该怎么做? Javascript需要像PHP Thread一样处于循环中吗?

情况是:
- 线程对设备状态进行轮询,然后javascript改变设备的图标状态(绿色或红色)。

2 个答案:

答案 0 :(得分:0)

你能做的是:

创建两个控制器方法:一个用于启动线程,另一个用于检查其状态。

您发出ajax请求以启动该线程。线程启动后,您将返回一个响应,并显示成功/错误消息。

如果线程成功启动,您将定期发出第二个ajax请求以检查线程的状态。

您还可以在第一次调用中返回线程休眠的预期时间,以便您可以调整第二个ajax请求的时间。

修改(试图澄清):

让我们说你的线程将检查机器有多少燃料。该线程将查询该机器并将其保存到数据库中。 控制器中的第二个方法将查询数据库并获取线程保存的结果。

示例

控制器:

class Controller
{
    public function startThread()
    {
        // start thread

        // return
    }

    public function checkStatus()
    {
        // query database for status

        // return results
    }

    public function thread()
    {
        // check for machines status

        // save the results into database
    }
}

使用Javascript:

$.ajax({
 type: 'POST',
 url: "controller/startThread/",
 data: dataObject,
 success: function(response) {
    // if success
    setTimeout(function() {
        $.ajax({
         type: 'POST',
         url: "controller/checkStatus/",
         data: dataObject,
         success: function(response) {
            // your result will be here
         })
    }, 10000)
 }
});

答案 1 :(得分:0)

<强>解决方案: 我使用了javascript函数setInterval和用户设置的时间,后者运行一个向php控制器发出ajax请求的函数。
Controller创建一个线程,用于轮询设备并死掉。