我有一個套接字應用程序,我試圖在端口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的工作方式有關。 –