我正在寻找一个基于节点的项目,该项目将具有一些不同的websocket连接,我对自己想做的代码本身很好,但似乎无法理解如何开始websocket模块(已编写的代码并将其移动到名为ws.js的文件中)以从server.js主文件运行。
我尝试将子进程作为子进程生成,但是得到
Error: spawn ws.js ENOENT
我已从每个文件中删除了所有其他代码,以防止隐藏的错误,这些文件的内容在下面。
Server.js
var child = require('child_process').spawn('node', ['ws.js']);
child.stdout.on('data', function (data) {
console.log('stdout: ' + data);
});
child.stderr.on('data', function (data) {
console.log('stderr: ' + data);
});
child.on('exit', function (code) {
console.log('child process exited with code ' + code);
});
setTimeout(function() {
child.stdin.write('echo %PATH%');
}, 2000);
ws.js
const Gdax = require('gdax');
const publicClient = new Gdax.PublicClient();
const websocket = new Gdax.WebsocketClient(['BTC-USD', 'ETH-USD']);
websocket.on('message', data => {
/* work with data */
console.log("data received");
});
websocket.on('error', err => {
/* handle error */
});
websocket.on('close', () => {
/* ... */
});
编辑-------------------------- 感谢来自Elliot server.js的以下响应,现在可以正常运行,但是ws.js子代从未写入控制台,因此它没有运行或无提示地失败。感谢您提供帮助,以帮助其正常工作。
欢呼
答案 0 :(得分:0)
对于控制台日志,您必须记住,子进程是一个新进程,不共享控制台。您可以使用 spawn()
使其工作,但是,由于您使用子进程来执行 nodeJs 文件,我建议使用 child_process.fork()
而不是 spawn
。它类似于 spawn,但专门用于其他 nodeJs 进程。好处是它使两个进程的通信变得更加容易。
考虑到这一点,您可以进行以下更新:
Server.js:
var child = require('child_process').fork('./ws.js');
child.on('message', function (data) {
console.log('stdout: ' + data);
});
child.on('error', function (data) {
console.log('stderr: ' + data);
});
child.on('exit', function (code) {
console.log('child process exited with code ' + code);
});
ws.js
const Gdax = require('gdax');
const publicClient = new Gdax.PublicClient();
const websocket = new Gdax.WebsocketClient(['BTC-USD', 'ETH-USD']);
websocket.on('message', data => {
/* work with data */
process.send("data received");
});
websocket.on('error', err => {
/* handle error */
});
websocket.on('close', () => {
/* ... */
});
process.send()
将数据发送到其父进程,在那里侦听器(即
child.on('message', callback)
) 正在等待接收。