Nodejs kullanırken Hata: listen EADDRINUSE nasıl düzeltilir?

Eğer 80 portlu bir sunucu çalıştırırsam ve xmlHTTPrequest kullanmaya çalışırsam şu hatayı alıyorum: Hata: listen EADDRINUSE

Bir istek yapmak istediğimde, 80 portunda bir sunucu çalıştırırken nodejs için neden sorun oluyor? Web tarayıcıları için bu bir sorun değil: Sunucu çalışırken internette gezinebilirim.

Sunucu:

  net.createServer(function (socket) {
    socket.name = socket.remoteAddress + ":" + socket.remotePort;
    console.log('connection request from: ' + socket.remoteAddress);
    socket.destroy();
  }).listen(options.port);

Ve istek:

var xhr = new XMLHttpRequest();

xhr.onreadystatechange = function() {
    sys.puts("State: " + this.readyState);

    if (this.readyState == 4) {
        sys.puts("Complete.\nBody length: " + this.responseText.length);
        sys.puts("Body:\n" + this.responseText);
    }
};

xhr.open("GET", "http://mywebsite.com");
xhr.send();
Çözüm

EADDRINUSE,listen()`in sunucuyu bağlamaya çalıştığı port numarasının zaten kullanımda olduğu anlamına gelir.

Yani, sizin durumunuzda, 80 numaralı bağlantı noktasında zaten bir sunucu çalışıyor olmalıdır.

Bu portta çalışan başka bir web sunucunuz varsa, node.js'yi bu sunucunun arkasına koymanız ve onun üzerinden proxy yapmanız gerekir.

Sunucunun gerçekten dinleyip dinlemediğini görmek için `dinleme' olayını bu şekilde kontrol etmelisiniz:

var http=require('http');

var server=http.createServer(function(req,res){
    res.end('test');
});

server.on('listening',function(){
    console.log('ok, server is running');
});

server.listen(80);
Yorumlar (3)

Sadece bir uyarı, Skype bazen 80 numaralı bağlantı noktasını dinler ve bu nedenle Node.js veya başka bir uygulamadan 80 numaralı bağlantı noktasını dinlemeye çalışırsanız bu hataya neden olur.

Skype'ta seçeneklere erişip Gelişmiş -> Bağlantı -> 80 numaralı bağlantı noktasını kullan (Bunun işaretini kaldırın) seçeneğine tıklayarak bu davranışı kapatabilirsiniz

Not: Bu değişikliği yaptıktan sonra Skype'ı yeniden başlatmayı unutmayın!

Yorumlar (5)

Bu hatayı daha önce (node'da) http.client ile görmüştüm ve hatırladığım kadarıyla sorun httpClient'ın başlatılmaması veya httpClient oluşturmada ve/veya url isteğinde kötü seçeneklerin ayarlanmasıyla ilgiliydi.

Yorumlar (1)