Javascript 使用node.js express应用程序的Webworkers
我是node.js新手,正在尝试构建一个express应用程序。 到目前为止,我已经安装了一个应用程序,并创建了一些基本路线 我的应用程序入口点是一个文件,在该文件中我正在使用应用程序设置服务器:Javascript 使用node.js express应用程序的Webworkers,javascript,node.js,express,web-worker,Javascript,Node.js,Express,Web Worker,我是node.js新手,正在尝试构建一个express应用程序。 到目前为止,我已经安装了一个应用程序,并创建了一些基本路线 我的应用程序入口点是一个文件,在该文件中我正在使用应用程序设置服务器: #!/usr/bin/env node /** * Module dependencies. */ var app = require('../app'); var debug = require('debug')('main'); var http = require('http'); /
#!/usr/bin/env node
/**
* Module dependencies.
*/
var app = require('../app');
var debug = require('debug')('main');
var http = require('http');
/**
* Get port from environment and store in Express.
*/
var port = normalizePort(process.env.PORT || '3000');
app.set('port', port);
/**
* Create HTTP server.
*/
var server = http.createServer(app);
/**
* Listen on provided port, on all network interfaces.
*/
server.listen(port);
server.on('error', onError);
server.on('listening', onListening);
/**
* Normalize a port into a number, string, or false.
*/
function normalizePort(val) {
var port = parseInt(val, 10);
if (isNaN(port)) {
// named pipe
return val;
}
if (port >= 0) {
// port number
return port;
}
return false;
}
/**
* Event listener for HTTP server "error" event.
*/
function onError(error) {
if (error.syscall !== 'listen') {
throw error;
}
var bind = typeof port === 'string'
? 'Pipe ' + port
: 'Port ' + port;
// handle specific listen errors with friendly messages
switch (error.code) {
case 'EACCES':
console.error(bind + ' requires elevated privileges');
process.exit(1);
break;
case 'EADDRINUSE':
console.error(bind + ' is already in use');
process.exit(1);
break;
default:
throw error;
}
}
/**
* Event listener for HTTP server "listening" event.
*/
function onListening() {
var addr = server.address();
var bind = typeof addr === 'string'
? 'pipe ' + addr
: 'port ' + addr.port;
debug('Listening on ' + bind);
}
express应用程序使用mongoose在适当的http请求上与db通信
此时,我还需要一个web worker,当服务器启动时,它每5秒生成一个随机数,如果生成的数字是10,则将其标识为事件,并将一些结果存储在数据库中
到目前为止,我不确定如何从这一点开始,并将其包括在结构中
我已经设置了用于写入数据库等的接口。我刚刚对web worker实现和集成部分失去了兴趣。在node.js中没有web Workers。但是我们有一个类似的叫做
子进程(请查看文档了解更多详细信息:)
如何使用child_进程?stackoverflow中有许多物料:
有关于如何在主模块中运行其他模块的说明(有关详细信息,请查看):
在主模块中:
var cp = require('child_process');
var child = cp.fork('./othermodulefile');
child.on('message', function(m) {
// Receive results from child process
console.log('received: ' + m);
});
// Send child process some work
child.send('Please up-case this string');
或者请查看此链接以了解上瘾的描述
从那一页上举个例子:
文件:support.js
console.log("Child Process " + process.argv[2] + " executed." );
const fs = require('fs');
const child_process = require('child_process');
for(var i=0; i<3; i++) {
var workerProcess = child_process.exec('node support.js '+i,
function (error, stdout, stderr) {
if (error) {
console.log(error.stack);
console.log('Error code: '+error.code);
console.log('Signal received: '+error.signal);
}
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
});
workerProcess.on('exit', function (code) {
console.log('Child process exited with exit code '+code);
});
}
文件:master.js
console.log("Child Process " + process.argv[2] + " executed." );
const fs = require('fs');
const child_process = require('child_process');
for(var i=0; i<3; i++) {
var workerProcess = child_process.exec('node support.js '+i,
function (error, stdout, stderr) {
if (error) {
console.log(error.stack);
console.log('Error code: '+error.code);
console.log('Signal received: '+error.signal);
}
console.log('stdout: ' + stdout);
console.log('stderr: ' + stderr);
});
workerProcess.on('exit', function (code) {
console.log('Child process exited with exit code '+code);
});
}
Webworkers是一种网络技术(即在浏览器中运行)。节点是一种服务器端技术,不支持webworkers。您需要创建一个浏览器应用程序并在那里使用webworker。为什么需要使用webworker生成随机数?为什么不使用setInterval()
set持续5秒?此外,您发布的代码对您的问题没有帮助,因为它与生成随机数无关。听起来就像是setInterval()
的工作。node.js中没有内置Webworker。我想我使用Webworker这个术语是错误的。但是下面的代码将解决我正在尝试做的事情。非常感谢。这正是我想要的。非常感谢您包含这些链接。让我的生活轻松多了:)