Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/398.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 关闭单节点服务器连接将关闭所有节点_Javascript_Node.js_Pm2 - Fatal编程技术网

Javascript 关闭单节点服务器连接将关闭所有节点

Javascript 关闭单节点服务器连接将关闭所有节点,javascript,node.js,pm2,Javascript,Node.js,Pm2,我几乎没有问任何关于堆栈溢出的问题,但这个问题我无法回答。我想我缺少了一些基本的东西,因为我对节点服务器还很陌生 我们的应用程序非常基本。服务器应该接收少量文本行(数据),合并并解析它们,一旦连接关闭(数据发送结束),它就会将数据发送到api var net = require('net'); var fs = require('fs'); const axios = require('axios') const server = new net.Server(); server.listen

我几乎没有问任何关于堆栈溢出的问题,但这个问题我无法回答。我想我缺少了一些基本的东西,因为我对节点服务器还很陌生

我们的应用程序非常基本。服务器应该接收少量文本行(数据),合并并解析它们,一旦连接关闭(数据发送结束),它就会将数据发送到api

var net = require('net');
var fs = require('fs');
const axios = require('axios')

const server = new net.Server();
server.listen(PORT, IP);

server.on("connection", client => {
    client.write("Hello\n");
    console.log('connected');
    
    let received = "";
    client.on("data", data => {
       received += data
       console.log("Partial data is: " + data);
    });

    client.on("close", () => {
        received = received.toString('utf8');
        fs.appendFile('log.txt', received, function (err) {});

        received = received.replace(/(?:\r\n|\r|\n)/g, "||");
        axios.post(APIADDRESS, {data: received});
        console.log('Full data is: '+ {data: received});
    });
});
要发送数据,我只需使用
netcat ipaddress端口运行
netcat
nc
,这不是问题。连接正常,收到状态信息

问题是——一旦我从两个不同的SSh服务器打开两个或多个连接,就会发生奇怪的事情。我可以一行接一行地发。对于这两种情况,服务器都会毫无问题地报告“部分数据”调试。 但是,一旦我关闭其中一个连接(ctrl+c),它们都会关闭。 最后,只接收来自手动关闭连接的数据。另一个来自单独ssh服务器上的单独的
nc
,似乎永远不会到达
客户端。它只是无缘无故地终止了

有什么想法吗?我甚至不知道从哪里开始

//编辑 刚刚在我的pc和一些ssh移动应用程序中使用分离的ssh服务器进行了测试。只要在任何设备上发送ctrl+c,它就会关闭所有客户端的连接

//忘了提到我正在运行pm2以保持服务器正常运行。一旦我手动打开脚本,忽略pm2-它工作正常。奇怪的这是因为PM2


我猜您已经将Putty配置为“尽可能共享SSH连接”。根据某些文件,执行此操作时:

使用此模式时,连接到给定服务器的第一个PuTTY将成为“上游”,这意味着它是管理真正SSH连接的PuTTY。所有重用连接的后续PuTTY都称为“下游”:它们根本不连接到真正的服务器,而是通过本地进程间通信方法连接到上游PuTTY

因此,如果在管理实际共享连接的PuTTY会话中按住Ctrl+C组合键,它们都会失去连接


您可以在客户端或服务器端禁用此共享连接功能,因为这两个端都必须启用才能进行共享。

对于将来来到这里的任何人

如果在启用--watch的情况下使用pm2,并且文本日志文件与主服务器脚本位于同一文件夹中,则。。。这就是为什么它在单个客户端断开连接后会断开连接。它只是检测到日志已更改


我不是在做鬼脸,这一点都不好笑。

您使用的netcat命令行到底是什么?你是在两台不同的电脑上做的?还是在同一台计算机上有两个独立的控制台?而且,您在哪里执行Ctrl-C?我在运行putty,两个不同ssh服务器的实例(打开两个窗口),但只有一台计算机。我只是在其中一个控制台上执行ctrl-c。你知道putty是否以某种方式共享实例之间的连接吗?也许读一下:我禁用了它并将其设置为上游,但是,正如我所说的,这是我用于
netcat
的两个完全可分离的ssh服务器。这是我最担心的。我想我需要同时在两台设备上测试它,只是为了确定。不,只是在我的pc和一些ssh移动应用程序上测试了它。一旦在任何设备上发送ctrl+c,它就会关闭所有客户端的连接。那么,修改SSH日志文件时,pm2是否正在重新启动服务器?你是说这是你问题的原因吗?