Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/42.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
Node.js 如何修复错误:在使用nodejs时侦听EADDRINUSE isn';不行,我还能做什么?_Node.js_Windows - Fatal编程技术网

Node.js 如何修复错误:在使用nodejs时侦听EADDRINUSE isn';不行,我还能做什么?

Node.js 如何修复错误:在使用nodejs时侦听EADDRINUSE isn';不行,我还能做什么?,node.js,windows,Node.js,Windows,我知道已经有人问过这个问题了,但提供的解决方案对我来说并不适用 以下是websocket服务器代码 const https = require('https'); const fs = require('fs'); const path = require('path'); const WebSocket = require('ws'); let connectionsList = []; /* */ var server = https.createServer({ cert:

我知道已经有人问过这个问题了,但提供的解决方案对我来说并不适用

以下是websocket服务器代码

const https = require('https');
const fs = require('fs');
const path = require('path');

const WebSocket = require('ws');

let connectionsList = [];
/*
 
*/
var server = https.createServer({
    cert: fs.readFileSync(path.resolve(__dirname, '../cert/certificate.crt')),
    key: fs.readFileSync(path.resolve(__dirname, '../cert/private.key'))
}, function (request, response) {
    console.log((new Date()) + ' Received request for ' + request.url);
    response.writeHead(404);
    response.end();
});

wsServer = new WebSocket.Server({ server });

function originIsAllowed(origin) {
    // put logic here to detect whether the specified origin is allowed.
    return true;
}

wsServer.on('connection', function (connection) {
    
    //save new connections here
    connectionsList.push(connection);

    connection.on('message', function (message) {
   
        const data = JSON.parse(message) || null;
        
        if (data !== null && data.type === 'push') {
            connectionsList.forEach((connection, index) => {
               //Must Skip First Item This One Pumps Data To The Others
               if (index > 0) {
                   if (connection.state === 'closed') {
                        ConnectionsList.splice(index);
                     }
                  connection.send(JSON.stringify(data.message));
                }
            })
        }
    });
});

wsServer.on("error", function(err){
    
    console.log(err);
});

module.exports = server;
这是赛跑选手或先发选手

// A simple pid lookup
var exec = require('child_process').execFile;
const wss = require('./ws_server/wss');
const config = require('./config');

var fun = function () {
    const process = exec(`${config.EXE.PATH}/${config.EXE.NAME}`, function () {
        wss.close();
        fun();
    });

    //if process is created, then makea  websocket server
    if (process.pid != null && process.pid !== undefined) {
        try{
             wss.on('error', function(error){
                console.log(error);
            });
            wss.listen({port: config.PORT,host: config.HOST}, function () {
                console.log((new Date()) + ` Server is listening on port ${config.PORT}`);
            });
        }
        catch(err){
        
        }
    }
}
fun();
我在下面一直有这个错误,即使在我检查过之后,也找不到使用该端口的任何东西。我已经尝试了这里提到的所有方法

但我似乎什么都不管用,请任何人向我解释一下这里的真正问题是什么。我正在使用windows server运行此nodejs脚本。谢谢

如何修复错误:使用nodejs时监听EADDRINUSE


问题是没有等待结束,因为:

  • 被称为
  • fun
    是同步执行的,
    wss.listen
    在关闭完成之前执行
应该需要在关闭回调中运行
fun

const process=exec(`${config.EXE.PATH}/${config.EXE.NAME}`,函数(){
wss.close(函数(){
//现在服务器已关闭
乐趣();
});
});

你试过了吗?是的,我试过了,但基于该端口我找不到任何已使用的IP。看起来你多次调用
fun()
导致
exec
回调触发了
wss。再听一遍,那么,我如何使程序继续执行呢?你想归档什么?我没有想到这一点,让我试试吧。我遵循了
ws
的文档。我不知道你的确切版本。您可以验证用户或eventi是否存在错误。但我会继续观察,看看有没有。我意识到错误又回来了。错误:侦听EADDRINUSE:地址已在使用0.0.0.0:8118