如何运行JXCORE

时间:2015-01-14 13:52:26

标签: javascript html5 node.js jxcore

我正在尝试运行jxcore。但我不能。请帮助我,因为我是新手。

server.js

var http = require("http");

jxcore.tasks.on('message', function (threadId, param)  {   
    console.log('Main thread received a message from subthread no ' +
                   threadId + '. Message: ', param);
});

http.createServer(function(req,resp) {
    console.log("Listening To Thread " + process.threadId);   
    resp.writeHead(200,{"Content-Type":"text/html"});    
    resp.end("Running JXCORE "+process.threadId);
}).listen(3000);

serverjx.js

var method = function() {
    try  {
        process.keepAlive();
        require("server");
        console.log("Welcome To NodeJS");
        return {
            someResult: "some result";
        };
    } catch(e) {
        console.log("Error Occured : "+e);
        return {"Error":e};
    }
}

jxcore.tasks.runOnce(code, {count:1000}, function(obj) {
    process.sendToMain({started:true});
    console.log("Return Value " + obj);

    setTimeout(function() {
        console.log("Waiting For TimeOut 5 Sec");
    }, 5000);
});

我在cmd上输入jx server.js jx mt-keep server.js

我没有看到线程正在运行。请帮忙

1 个答案:

答案 0 :(得分:1)

这里有几个结构性错误。此外,它并不明显,你正在尝试做什么。

场景1 - 仅运行 server.js

他们都工作:jx mt server.jsjx mt-keep server.js

场景2 - 运行 serverjx.js ,为每个线程加载 server.js

这里可能尝试使用jxcore.tasks.runOnce()在每个线程上创建一个http服务器。因此,每个线程都会加载 server.js 并在那里创建自己的http服务器实例。

这应该以这种方式启动:jx serverjx.js(没有mt或mt-keep)

虽然我没有看到这样做的重点(为什么不像在场景1中那样运行它,因为它是多线程http服务器的正确方法?),经过一些修复,代码看起来像这样:

serverjx.js

var method = function () {
    try {
        process.keepAlive();
        require("./server");
        console.log("Welcome To NodeJS");
        return {
            someResult: "some result"
        };
    } catch (e) {
        console.log("Error Occured : " + e);
        return {"Error": e};
    }
};

jxcore.tasks.runOnce(method, {count: 1000});

请注意以下几点:

    如果您尝试加载 server.js ,则
  • require('server')错误 - 您必须致电require('./server')
  • jxcore.tasks.runOnce(code, ...)错了 - 应该是jxcore.tasks.runOnce(method, ...)
  • jxcore.tasks.runOnce没有收到回调参数,所以我删除了它。

另一件事是,在你的回调中,你试图将一个对象发送到主线程(process.sendToMain({started:true})),但你已经将侦听器放在 server.js 中({{1}实际上它被加载到一个线程中(因此它不是主线程)并且消息无法到达那里。