我正在尝试运行jxcore。 但我做不到。请帮助我,因为我是新手。
服务器.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);
服务器JX.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 - 仅运行服务器.js
它们都有效:jx mt server.js
或jx mt-keep server.js
场景 2 - 运行 serverjx.js为每个线程服务器加载.js
在这里,您可能尝试使用 jxcore.tasks.runOnce()
在每个线程上创建一个 http 服务器。因此,每个线程都会加载服务器.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});
请注意以下几点:
-
require('server')
如果您尝试加载服务器.js是错误的 - 您必须调用require('./server')
-
jxcore.tasks.runOnce(code, ...)
错了 - 应该jxcore.tasks.runOnce(method, ...)
-
jxcore.tasks.runOnce
没有收到回调参数,所以我删除了它。
另一件事是,在您的回调中,您试图将一个对象发送到主线程(process.sendToMain({started:true})
),但是您已经在服务器中找到了侦听器.js(jxcore.tasks.on('message')
),该侦听器实际上被加载到线程中(因此它不是主线程)并且消息无法到达那里。