我的世界/节点 - 写入process.stdin和儿童过程中也接收输入

问题描述 投票:1回答:1

我想写一个终端应用程序,让我来启动和停止的Minecraft服务器,通过写readline的,将首先由节点工艺进行检查参数,然后,如果由脚本确定,发送到服务器的Minecraft使用代替。

与最新的节点构建和乙脑的Minecraft服务器运行在Windows 10。

首先,我测试了刚刚起步的时候,在一个子进程持有的Minecraft服务器催生了一个节点处理。我设置了3个标准输入输出参数“继承”和也“IPC”(不是100%肯定,为什么这是必要的,但我看到别人这样做)。一旦运行,如果我输入任何东西到终端的Minecraft服务器将通过节点接收输入。这是伟大的。我想要的东西,不过,是要能够运行的ReadLine和解析输入并确定节点是否应该处理输入,或者他们是否应该被发送到服务器的Minecraft。

所以,我与标准输入输出参数和使用process.stdin.write()和这样的发挥各地,试图找出如何写的子进程的标准输入,这样的的Minecraft服务器会接收输入,但无济于事。

所以,我想运行一个“主”节点进程将fork一个次节点的过程。 “大师”将readline的运行,并使用child.send()如果任何输入是被发送到那里。然后,在第二节点过程中,我将开始我的世界服务器设置为继承所有3个标准输入输出参数的产卵。然后我会process.on(“信息”)听,如果收到一个消息,将其写入process.stdin希望在我的世界进程将收到通过继承输入。但是,这也没有工作。

我已经尝试了一些不同的东西,但最终我没有任何运气。我试图寻找尽可能多的,因为我可以,但我没有发现任何东西,这将有助于我。很抱歉,如果这最终成为一个没有脑子。

// First Iteration
// spawns in a minecraft server and listens for input in the terminal
// effectively the same as running the equivalent run command for the minecraft server, except this runs as a Node child process

const spawn = require('child_process').spawn
var minecraft = spawn('java',  ['-jar', '-Xms1G','-Xmx1G', '-Dfile.encoding=utf8', '../spigot-1.13.2.jar'], {
    stdio: [
        'inherit',
        'inherit',
        'inherit',
        'ipc'
    ],
})


// Second Iteration
// changed cp stdin to pipe and tried to write manually via rl

const spawn = require('child_process').spawn
const readline = require('readline')
var minecraft = spawn('java',  ['-jar', '-Xms1G','-Xmx1G', '-Dfile.encoding=utf8', '../spigot-1.13.2.jar'], {
    stdio: [
        'pipe',
        'inherit',
        'inherit',
        'ipc'
    ],
})
var rl = readline.createInterface({
    input: process.stdin,
    output: process.stdout
}).on('line',(line)=> {
    process.stdin.write(line)
})


// Later iterations involved running nested child processes, basically, but were all more or less more-abstract versions of my second iteration.

我想实现什么,正如我刚才所说,是能够侦听来自与readline的终端管理输入和酌情发送输入的Minecraft服务器进程。否则,输入的ReadLine将在节点过程进行处理。

**澄清,当我说这是行不通的,我的意思是,我没有得到任何来自的Minecraft服务器进程的响应。没有在游戏中,没有在命令行上。随着我的第一次迭代中,我可以看到从两个在游戏中和命令行上的Minecraft过程输出。但到了第二次迭代,什么都没有。

node.js minecraft
1个回答
0
投票

你不能写process.stdin。您的意思是写的Minecraft过程mincraft.stdin的标准输入?

minecraft.stdin.write(line)
© www.soinside.com 2019 - 2024. All rights reserved.