Node.js 如何修复错误:在使用nodejs时侦听EADDRINUSE isn';不行,我还能做什么?
我知道已经有人问过这个问题了,但提供的解决方案对我来说并不适用 以下是websocket服务器代码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:
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