无法使Websocket客户端作为子进程运行

时间:2019-01-12 20:56:17

标签: node.js

我正在寻找一个基于节点的项目,该项目将具有一些不同的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子代从未写入控制台,因此它没有运行或无提示地失败。感谢您提供帮助,以帮助其正常工作。

欢呼

1 个答案:

答案 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)) 正在等待接收。

相关问题