node.js - node - socket io tutorial
Node.js connect solo funciona en localhost (7)
Enlazar a 0.0.0.0 es la mitad de la batalla. Hay un firewall de IP (diferente del que está en las preferencias del sistema) que bloquea los puertos TCP. Por lo tanto, el puerto debe ser desbloqueado allí también haciendo:
sudo ipfw agregar permitir tcp de cualquier a cualquier
He escrito una pequeña aplicación node.js, que usa Connect, que sirve una página web, y luego la envía actualizaciones periódicas. También acepta y registra las observaciones del usuario en un archivo de disco.
Funciona bien siempre que esté en el host local, pero no puedo obtener otros compusters en la misma intranet para verlo. Estoy usando el puerto 3000, pero cambiar al puerto 8080 u 80 no me ayudó.
Aquí está el código que estoy usando para configurar la conexión:
var io = require(''socket.io''),
connect = require(''connect'');
var app = connect().use(connect.static(''public'')).listen(3000);
var chat_room = io.listen(app);
Como mencioné anteriormente, intenté cambiar el número de puerto a 8080 o a 80, y no vi ninguna diferencia, así que no creo que sea un problema de firewall (pero podría estar equivocado). También he pensado, después de leer preguntas similares sobre HTTP, agregar 0.0.0.0 a listen () pero no parece que listen () tome un parámetro de máscara IP.
Lo más probable es que el socket del servidor esté vinculado a la dirección IP loopback 127.0.0.1
lugar de la dirección IP simbólica "todas las direcciones IP" 0.0.0.0
(tenga en cuenta que NO es una máscara de red). Para confirmar esto, ejecute sudo netstat -ntlp
(si está en Linux) o netstat -an -f inet -p tcp | grep LISTEN
netstat -an -f inet -p tcp | grep LISTEN
(OSX) y verificar a qué IP está destinado su proceso (busque la línea con ": 3000"). Si ves "127.0.0.1", ese es el problema. Solucionarlo pasando "0.0.0.0" a la llamada de listen
:
var app = connect().use(connect.static(''public'')).listen(3000, "0.0.0.0");
Para obtener acceso de otros usuarios a su máquina local, generalmente uso ngrok . Ngrok expone su servidor local a la web y tiene un contenedor NPM que es simple de instalar e iniciar:
$ npm install ngrok -g
$ ngrok http 3000
Vea este uso de ejemplo:
En el ejemplo anterior, la instancia de navegación local en: localhost: 3000 ahora está disponible en Internet, disponible en: http://69f8f0ee.ngrok.io o https://69f8f0ee.ngrok.io
Tengo una solución muy simple para este problema: process.argv
te da una lista de los argumentos pasados a la aplicación de nodo. Entonces si corres:
node server.js 0.0.0.0
Obtendrás:
process.argv[0] //=> "node"
process.argv[1] //=> "server.js"
process.argv[2] //=> "0.0.0.0"
Entonces puede usar process.argv[2]
para especificar que como la dirección IP que desea escuchar:
http.listen(3000, process.argv[2]);
Ahora, su aplicación está escuchando "todas" las direcciones IP, por ejemplo:
http://192.168.1.4:3000/your_app
¡Espero que esto ayude a alguien!
Trabajando para mí con esta línea (simplemente agrega --listen cuando se está ejecutando):
node server.js -p 3000 -a : --listen 192.168.1.100
Espero eso ayude...
Distro de Fedora o Centos revisa tu selinux y firewalld en mi caso firewalld impidió la conexión:
Selinux: $sestatus SELinux status: enabled SELinuxfs mount: /sys/fs/selinux SELinux root directory: /etc/selinux Loaded policy name: targeted Current mode: {{checkmode}} Mode from config file: {{checkconfig}} Policy MLS status: enabled Policy deny_unknown status: allowed Max kernel policy version: 30 Firewalld status: $systemctl status firewalld
En su aplicación, lo hace accesible desde cualquier dispositivo de la red:
app.listen(3000, "0.0.0.0");
Para NodeJS en Azure, GCP y AWS
Para Azure vm implementado en el administrador de recursos, verifique su grupo de seguridad de red virtual y abra puertos o rangos de puertos para que sea alcanzable; de lo contrario, en los puntos finales de la nube si vm se implementa en la versión anterior de azul.
Solo busca el equivalente para GCP y AWS