gpt4 book ai didi

javascript - net.connect 上的 EPIPE 到 HTTP 服务器

转载 作者:行者123 更新时间:2023-12-02 22:20:56 25 4
gpt4 key购买 nike

我正在尝试使用 roder 中的 net.connect 连接到 Node http 服务器套接字(expressJs),以将该套接字传递给我的 repl,以便能够基本上连接到我的 http 服务器并启动命令。

尝试此操作时,我在启动 repl 时收到错误 EPIPE。

这里是 repl 的代码:

const args = process.argv.slice(2);
if (args.length < 1) {
process.exit(1);
}

const url = args[0];
const [host, port] = url.split(':');

//this will get the url to connect to
const socket = net.connect(parseInt(port), host);

process.stdin.pipe(socket);
socket.pipe(process.stdout);

Console.start({
expose: { container, Metric:metricsObject},
socket:socket
});

启动函数:

start(options = {}) {
const { expose, socket } = options;
const repl = REPL.start({
eval: promisableEval,
terminal:true,
input: socket,
output: socket,
});

Object.assign(repl.context, expose);
}

正在运行的http服务器:

const http = this.express
.listen(this.config.web.port, () => {
const { port } = http.address();
this.logger.info(`[p ${process.pid}] Listening at port ${port}`);
resolve();
});

this.express 只是express的一个实例:this.express = express();

最佳答案

您似乎正在尝试通过类似 http://mine.example.com:3000/path/item 的 URL 连接到 http(或 https?)服务器通过说

net.connect(parseInt('3000/path/item'), 'http://mine.example.com');

由于多种原因,它不起作用。

  1. 除非您是 http 协议(protocol)方面非常优秀的程序员专家,否则您不应该使用 net.connect与 http 服务器对话。尝试使用http.clientRequest相反。

  2. 传递给 net.connect 的主机名应该是原始机器名称,例如 'mine.example.com'并且前面没有协议(protocol)说明符。

  3. 端口,类似。

抱歉,我不明白你想用标准输入和标准输出做什么。但是你的socket在其连接操作完成并且您收到一个事件宣布该情况之前,将无法使用。

您可以使用旧的 telnet连接到 http 服务器的程序。它允许您向服务器输入内容,然后显示您返回的内容。在你的情况下你会这样做

 telnet localhost 3000  # from shell your command line

服务器然后连接并坐在那里等待。您输入

 GET / HTTPS/1.0

然后两个 <Enter> s。然后,如果您输入 http://localhost:3000,服务器就会发回它会发送的任何内容。进入浏览器位置行。 然后关闭连接。

我不确定 http 协议(protocol)操作如何适合您的 REPL。

您在 https://medium.com/trabe/mastering-the-node-js-repl-part-3-c0374be0d1bf 提到的示例不连接到http服务器,它连接到tcp服务器。 Http 服务器(包括所有 Node/Express 服务器)是 tcp 服务器的一个亚种,但它们将 http 协议(protocol)分层在 tcp 协议(protocol)之上。 http 协议(protocol)不适合 REPL 的来回对话风格。

关于javascript - net.connect 上的 EPIPE 到 HTTP 服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59230061/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com