我有一个套接字应用程序,我试图在端口443(https)上侦听。如果我改变端口(例如8080),我不会遇到任何问题。无法运行节点js应用程序侦听443
所示的错误是
error raised: Error: listen EACCES
我的应用程序的源代码是:
var fs = require('fs');
// create the https server and listen on port
var options = {
ca: fs.readFileSync('ca.pem'),
cert: fs.readFileSync('cert.pem'),
key: fs.readFileSync('server.key')
};
var server = require('https').createServer(options);
var portNo = 443;
var app = server.listen(portNo, function() {
console.log((new Date()) + " Server is listening on port " + portNo);
});
// create the socket server on the port
var io = require('socket.io').listen(app);
// This callback function is called every time a socket
// tries to connect to the server
io.sockets.on('connection', function (socket) {
console.log((new Date()) + ' Connection established.');
// When a user send a SDP message
// broadcast to all users in the room
socket.on('message', function (message) {
socket.broadcast.emit('message', message);
});
// When the user hangs up
// broadcast bye signal to all users in the room
socket.on('disconnect', function() {
// close user connection
console.log((new Date()) + " Peer disconnected.");
socket.broadcast.emit('user disconnected');
});
});
我已经看到了很多关于到Linux告诉他们作为须藤运行的答案,所以我尝试运行的节点服务器为管理员,但无济于事。
这是在Windows Server 2012框上运行。
谢谢。
我不能共享IIS端口(我有一个网站作为https运行在同一个ip上)?如果不是这可以解释它。我不知道这是一个限制。 – rashleighp
您无法与IIS共享端口。进程无法共享TCP端口。 – Daniel
IIS能够在单个端口上为多个站点提供服务,因为它全部由同一个进程处理。当它收到HTTP请求时,它会查看主机名HTTP标头并使用它来确定要提供哪个网站。即便如此,由于我不完全理解的原因,这不适用于443,但我怀疑它与SSL的工作方式有关。 –