簡體   English   中英

Node.js websocket 錯誤“錯誤:監聽 EADDRNOTAVAIL 錯誤:監聽 EADDRNOTAVAIL”

[英]Node.js websocket error "Error: listen EADDRNOTAVAIL Error: listen EADDRNOTAVAIL"

應用程序在 localhost 上工作正常。但是當它連接到服務器時出現錯誤。
我通過端口 22 連接服務器

這是錯誤

Error: listen EADDRNOTAVAIL Error: listen EADDRNOTAVAIL
at errnoException (net.js:904:11)
at Server._listen2 (net.js:1023:19)
at listen (net.js:1064:10)
at net.js:1146:9
at dns.js:72:18
at process._tickCallback (node.js:419:13)
at Function.Module.runMain (module.js:499:11)
at startup (node.js:119:16)
at node.js:906:3

任何幫助!!!

-更新-

我運行netstat -tulpn | grep 22 netstat -tulpn | grep 22

結果:

 tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      683/sshd
 tcp6       0      0 :::22                   :::*                    LISTEN      683/sshd

但我運行netstat -tulpn | grep 80 netstat -tulpn | grep 80

無顯示。

任何幫助。這是服務器故障嗎?

運行netstat -nlt

     Active Internet connections (only servers)
     Proto Recv-Q Send-Q Local Address           Foreign Address         State
     tcp        0      0 127.0.0.1:27017         0.0.0.0:*               LISTEN
     tcp        0      0 127.0.0.1:5901          0.0.0.0:*               LISTEN
     tcp        0      0 127.0.0.1:5902          0.0.0.0:*               LISTEN
     tcp        0      0 0.0.0.0:6001            0.0.0.0:*               LISTEN
     tcp        0      0 0.0.0.0:6002            0.0.0.0:*               LISTEN
     tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN
     tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN
     tcp6       0      0 :::22                   :::*                    LISTEN
     tcp6       0      0 ::1:631                 :::*                    LISTEN

運行netstat -anp | grep :80 netstat -anp | grep :80

     tcp        1      0 162.243.145.226:60728   91.189.94.25:80         CLOSE_WAIT  1726/ubuntu-geoip-p
     tcp        1      0 162.243.145.226:47842   74.125.239.148:80       CLOSE_WAIT  8104/epiphany-brows
     tcp        1      0 162.243.145.226:60727   91.189.94.25:80         CLOSE_WAIT  1417/ubuntu-geoip-p
     tcp        1      0 162.243.145.226:58818   198.41.30.199:80        CLOSE_WAIT  8104/epiphany-brows

您正在使用已使用的端口。 您必須更改端口或必須終止正在偵聽端口的進程。 打開終端並寫入(示例): lsof -i :22lsof -i :80lsof -i :8000kill PID進程的kill PID


如何更改total.js 中的監聽端口

  1. /app/config/app/config-release/app/config-debug 中
default-ip       : 127.0.0.1
default-port     : 8000

或者

// For e.g. Heroku
default-ip       : auto
default-port     : auto
  1. 如果存在文件: release.jsdebug.js
var fs = require("fs");
var options = {};

// options.ip = "127.0.0.1";
// options.port = parseInt(process.argv[2]);
options.port = 8000;
  1. 如果僅存在index.js
// for development:
require('total.js').http('debug', { port: 8000 });

// or for production:
require('total.js').http('release', { port: 8000 });

感謝和文檔: http : //docs.totaljs.com

今天剛看到這個。 用戶已經注釋掉127.0.0.1 localhost在自己的/etc/hosts的文件,以及其他網絡服務是解決localhost與該用戶的計算機相關的不同的IP地址。

解決方案是將此行添加到/etc/hosts

127.0.0.1 localhost

我認為您使用的是基於 Unix 的操作系統,如果是這種情況,那么您不能在沒有 sudo 訪問的情況下使用 1024 以下的任何端口。

此外,在深入挖掘之前,請檢查偵聽端口是否未被任何其他進程使用。

快速修復(僅用於開發):

  • sudo node file.js
  • server.listen(3000); // any number > 1024

對於生產(永遠不要在具有 root 訪問權限的生產上運行節點。)

您必須使用 ip 表將偵聽端口(例如:3000)映射到 80

sudo iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3000

端口 22 是為 ssh 保留的,在眾所周知的端口列表中,請查看http://en.wikipedia.org/wiki/Port_(computer_networking)#Common_port_numbers

我建議您在端口 8000-9000 上運行節點應用程序進行開發,但您可以使用已注冊端口范圍中的任何一個。

如果您在多次請求后才遇到此錯誤,您可能需要檢查您的端口范圍設置並進行調整。 還有 TCP 超時設置,例如 FIN_WAIT 可以使連接保持打開的時間比預期的要長。

sysctl -a | grep net sysctl -a | grep net應顯示所有網絡連接設置。

sysctl -a | grep port 用於端口范圍設置的sysctl -a | grep port

sysctl -a | grep keep sysctl -a | grep keep tcp 等待設置。

有關設置內容的更多詳細信息/建議, 請參見此處此處此處為 mac)。

如果您要修改設置,我建議您首先將/etc/sysctl.conf復制到/etc/sysctl.conf.bak ,然后修改該文件中的設置。 它們可以通過命令行進行調整,但這是暫時的,重置它們可能會很麻煩。

您可能不想在生產中這樣做。

附加文檔:

https://ma.ttias.be/linux-increase-ip_local_port_range-tcp-port-range/

https://easyengine.io/tutorials/linux/sysctl-conf/

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM