Instalación del entorno Node.js y configuración del servicio, combinado con penetración de intranet y acceso a la red pública en cualquier momento y en cualquier lugar.

Prefacio

Node.js es un entorno de ejecución multiplataforma de código abierto para ejecutar JavaScript en el lado del servidor. Node.js es propiedad de la Fundación OpenJS (anteriormente Fundación Node.js, que se fusionó con la Fundación JS) y también es un proyecto de la Fundación Linux. Node.js utiliza el código de ejecución V8 desarrollado por Google y utiliza tecnologías como modelos de entrada y salida asincrónicos, sin bloqueo y basados ​​en eventos para mejorar el rendimiento y optimizar el volumen de transmisión y la escala de las aplicaciones. Estas técnicas se utilizan normalmente en aplicaciones en tiempo real con uso intensivo de datos.

La mayoría de los módulos básicos de Node.js están escritos en lenguaje JavaScript. Antes de la aparición de Node.js, JavaScript se usaba generalmente como lenguaje de programación del lado del cliente y los programas escritos en JavaScript a menudo se ejecutaban en el navegador del usuario. La aparición de Node.js permite utilizar JavaScript para la programación del lado del servidor. Node.js contiene una serie de módulos integrados que permiten que el programa se separe del servidor HTTP Apache o IIS y se ejecute como un servidor independiente. A continuación se presentará cómo acceder al servidor Windwos Node.js en una red pública remota en unos sencillos pasos.

1. Instale el entorno Node.js

Descargue node.js del sitio web oficial, elegimos la instalación de 64 bits con un solo clic

https://nodejs.org/zh-cn/download/

imagen-20230302141011787

Después de la instalación, abrimos cmd, ingresamos el comando y el número de versión aparecerá normalmente, lo que indica que la instalación fue exitosa. La versión de instalación con un clic configurará las variables de entorno de forma predeterminada.

node -v

imagen-20230302150424377

2. Crear el servicio node.js

Aquí creamos un servicio nodejs simple localmente y creamos un juego de página de serpiente para demostración.

Primero cree una carpeta localmente y cree 2 archivos nuevos en la carpeta, uno es jsun archivo y el otro es un htmlarchivo, deben colocarse en el mismo directorio y luego abrirse con vscode.

  • game.html文件
  • nodetest.js文件

imagen-20230302155043387

Agregue game.htmlel siguiente htmlcódigo y guárdelo. El siguiente código es un juego de página html (Snake)

<!DOCTYPE html>
<html>
<head>
	<title>贪吃蛇</title>
	<meta charset="UTF-8">
	<meta name="keywords" content="贪吃蛇">
	<meta name="Description" content="这是一个初学者用来学习的小游戏">
	<style type="text/css">
	*{
      
      margin:0;}
	.map{
      
      margin:100px auto;
		height:600px;
		width:900px;
		background:#00D0FF;
		border:10px solid #AFAEB2;
		border-radius:8px;
	}
	</style>
</head>
 
<body>
<div class="map">
<canvas id="canvas" height="600" width="900">
	
</canvas>
</div>
 
<script type="text/javascript">
 //获取绘制工具
	/*
	var canvas = document.getElementById("canvas");
	var ctx = canvas.getContext("2d");//获取上下文
	ctx.moveTo(0,0);
	ctx.lineTo(450,450);*/
	var c=document.getElementById("canvas");
    var ctx=c.getContext("2d");
    /*ctx.beginPath();
    ctx.moveTo(0,0);
    ctx.lineTo(450,450);
    ctx.stroke();
    */
 
    var snake =[];//定义一条蛇,画蛇的身体
    var snakeCount = 6;//初始化蛇的长度
	var foodx =0;
	var foody =0;
    var togo =0;
    function drawtable()//画地图的函数
    {
      
      
 
 
    	for(var i=0;i<60;i++)//画竖线
    	{
      
      
    		ctx.strokeStyle="black";
    		ctx.beginPath();
    		ctx.moveTo(15*i,0);
    		ctx.lineTo(15*i,600);
    		ctx.closePath();
    		ctx.stroke();
    	}
        for(var j=0;j<40;j++)//画横线
    	{
      
      
    		ctx.strokeStyle="black";
    		ctx.beginPath();
    		ctx.moveTo(0,15*j);
    		ctx.lineTo(900,15*j);
    		ctx.closePath();
    		ctx.stroke();
    	}
    	
    	for(var k=0;k<snakeCount;k++)//画蛇的身体
			{
      
      
			ctx.fillStyle="#000";
			if (k==snakeCount-1)
			{
      
      
				ctx.fillStyle="red";//蛇头的颜色与身体区分开
			}
			ctx.fillRect(snake[k].x,snake[k].y,15,15);//前两个数是矩形的起始坐标,后两个数是矩形的长宽。
			
			}
			//绘制食物	
    		ctx.fillStyle ="black";
	     ctx.fillRect(foodx,foody,15,15);
	     ctx.fill();
    	
    }
 
    
    function start()//定义蛇的坐标
    {
      
      
    	//var snake =[];//定义一条蛇,画蛇的身体
        //var snakeCount = 6;//初始化蛇的长度
		
		for(var k=0;k<snakeCount;k++)
    		{
      
      
    			snake[k]={
      
      x:k*15,y:0};
    			
            }
			
		  drawtable();
          addfood();//在start中调用添加食物函数
 
    }
 
    function addfood()
	{
      
      
	foodx = Math.floor(Math.random()*60)*15; //随机产生一个0-1之间的数
	foody = Math.floor(Math.random()*40)*15;
		
		for (var k=0;k<snake;k++)
		{
      
      
			if (foodx==snake[k].x&&foody==sanke[k].y)//防止产生的随机食物落在蛇身上
			{
      
      	
			addfood();
			}
		}
	
	
	}	
    		
   function move()
   {
      
      
	switch (togo)
	{
      
      
	case 1: snake.push({
      
      x:snake[snakeCount-1].x-15,y:snake[snakeCount-1].y}); break;//向左走
	case 2: snake.push({
      
      x:snake[snakeCount-1].x,y:snake[snakeCount-1].y-15}); break;
	case 3: snake.push({
      
      x:snake[snakeCount-1].x+15,y:snake[snakeCount-1].y}); break;
	case 4: snake.push({
      
      x:snake[snakeCount-1].x,y:snake[snakeCount-1].y+15}); break;
	case 5: snake.push({
      
      x:snake[snakeCount-1].x-15,y:snake[snakeCount-1].y-15}); break;
	case 6: snake.push({
      
      x:snake[snakeCount-1].x+15,y:snake[snakeCount-1].y+15}); break;
	default: snake.push({
      
      x:snake[snakeCount-1].x+15,y:snake[snakeCount-1].y});
	}
    snake.shift();//删除数组第一个元素
   	ctx.clearRect(0,0,900,600);//清除画布重新绘制
   	isEat();
	isDead();
	drawtable();
   } 			
   
   function keydown(e)
   {
      
      
   switch(e.keyCode)
		{
      
      
         case 37: togo=1; break;
		 case 38: togo=2; break;
		 case 39: togo=3; break;
		 case 40: togo=4; break;
		 case 65: togo=5; break;
		 case 68: togo=6; break;
		}
   }
   
   function isEat()//吃到食物后长度加1
   {
      
      
    if(snake[snakeCount-1].x==foodx&&snake[snakeCount-1].y==foody)
   {
      
      
		addfood();
		snakeCount++;
		snake.unshift({
      
      x:-15,y:-15});
   }
   
   }
   //死亡函数
   function isDead()
   {
      
      
    if (snake[snakeCount-1].x>885||snake[snakeCount-1].y>585||snake[snakeCount-1].x<0||snake[snakeCount-1].y<0)
		{
      
      
        

		window.location.reload();
		}
   }
   
    document.onkeydown=function(e)
{
      
      
	keydown(e);
 
} 
window.onload = function()//调用函数
{
      
       
	start();
	setInterval(move,150);
	drawtable();
	
	
 
}
</script>
</body>
</html>

nodetest.jsAgregue el siguiente jscódigo al archivo. El siguiente código significa abrir uno http服务y configurar el 3000número de puerto de escucha.

const http = require('http');

//加载文件模块
const fs = require("fs");


const hostname = '127.0.0.1';
//端口
const port = 3000;

const server = http.createServer((req, res) => {
    
    
  res.statusCode = 200;
  res.setHeader('Content-Type', 'text/html');
  
  fs.readFile('./game.html', (err, data) => {
    
    
    if (err) throw err;
    console.log(data.toString);
    res.end(data);
  });
  
  
 
});

server.listen(port, hostname, () => {
    
    
  console.log(`Server running at http://${
      
      hostname}:${
      
      port}/`);
});

3. Acceda al servicio node.js

Después de escribir el código relevante, iniciamos el servicio e ingresamos el comando en la consola vscode [tenga en cuenta que debe ingresar el directorio de archivos correspondiente para ejecutar el comando]

node .\nodetest.js

imagen-20230302170633966

Hay un servicio de aviso de retorno normal en el puerto local 3000. Abrimos el navegador y visitamos http://127.0.0.1:3000/. La interfaz de serpiente parece indicar éxito [Control del juego: teclas arriba, abajo, izquierda y derecha ]

imagen-20230302171105342

4.Penetración de intranet

Aquí usamos cpolar para la penetración de la intranet, que admite protocolos http/https/tcp, no limita el tráfico, no requiere una dirección IP pública y no requiere configurar un enrutador, y es fácil de usar.

4.1 Instalar y configurar la penetración de la intranet cpolar

Sitio web oficial de cpolar: https://www.cpolar.com/

Visite el sitio web oficial de cpolar, registre una cuenta y luego descargue e instale el cliente. Para obtener instrucciones de instalación específicas, consulte el tutorial de documentación del sitio web oficial.

  • Sistema Windows: después de descargar el paquete de instalación del sitio web oficial, haga doble clic en el paquete de instalación e instálelo de forma predeterminada.
  • Sistema Linux: admite secuencias de comandos de instalación automática con un solo clic. Para obtener más información, consulte la documentación del sitio web oficial: Guía de inicio

20230130105715

4.2 Crear puerto local de mapeo de túnel

Después de que cpolar se haya instalado correctamente, acceda al puerto local 9200 http://localhost:9200 en el navegador e inicie sesión con la cuenta de correo electrónico de cpolar.

20230130105810

Haga clic en Administración de túneles: crear túnel en el panel izquierdo para crear un túnel http que apunte al puerto local 3000.

  • Nombre del túnel: Puede personalizar el nombre. Tenga cuidado de no duplicar el nombre del túnel existente.
  • Protocolo: seleccione http
  • Dirección local: 3000
  • Tipo de nombre de dominio: elija un nombre de dominio aleatorio de forma gratuita
  • Región: Seleccionar China vip

Hacer clic创建

imagen-20230302171633772

Una vez que el túnel se haya creado correctamente, haga clic en Estado a la izquierda: Lista de túneles en línea, vea la dirección de red pública generada y luego copie la dirección.

imagen-20230302171740715

Abra el navegador y use la dirección pública anterior para acceder. En este punto, hemos publicado con éxito el node.jsservicio local en la dirección pública.

imagen-20230302171817498

5. Dirección de red pública fija

Dado que el túnel creado usando cpolar arriba usa una dirección de red pública aleatoria, cambiará aleatoriamente dentro de las 24 horas, lo que no favorece el acceso remoto a largo plazo. Por lo tanto, podemos configurarle un nombre de subdominio de segundo nivel, esta dirección es una dirección fija y no cambiará aleatoriamente.

  • Reservar un subdominio de segundo nivel

Inicie sesión en el sitio web oficial de cpolar, haga clic en Reservar a la izquierda, seleccione reservar el nombre del subdominio de segundo nivel, establezca un nombre de subdominio de segundo nivel, haga clic en Reservar y copie el nombre del subdominio de segundo nivel reservado después de que la reserva sea exitosa.

imagen-20230302172317079

Una vez que la reserva sea exitosa, copie la dirección del nombre del subdominio de segundo nivel reservado

imagen-20230302172454064

  • Configurar nombres de subdominios de segundo nivel

Visite http://127.0.0.1:9200/, inicie sesión en la interfaz de administración de la interfaz de usuario web de cpolar, haga clic en Administración de túneles - Lista de túneles en el panel izquierdo, busque los 3000 túneles que desea configurar y haga clic en Editar a la derecha.

imagen-20230302172856768

Modifique la información del túnel y configure el nombre del subdominio de segundo nivel reservado correctamente en el túnel.

  • Tipo de nombre de dominio: seleccione un nombre de subdominio de segundo nivel
  • Subdominio: complete el nombre del subdominio de segundo nivel reservado correctamente

Hacer clic更新

imagen-20230302172806823

Una vez completada la actualización, abra la lista de túneles en línea. En este momento, puede ver que la dirección de la red pública ha cambiado y el nombre de la dirección se ha convertido en el nombre de subdominio reservado de segundo nivel. Cópielo.

imagen-20230302172935943

Luego use la dirección http fija para abrir el acceso al navegador

imagen-20230302173012863
El acceso fue exitoso. Ahora la dirección de la red pública es fija y no cambiará aleatoriamente. Penetró con éxito la intranet de cpolar para lograr acceso remoto a los servicios de nodejs sin requerir una dirección IP pública ni configurar un enrutador.

Reimpreso del artículo de cpolar pole cloud: Utilice Nodejs para crear un servidor HTTP simple: penetración de intranet en la red pública para acceso remoto

Supongo que te gusta

Origin blog.csdn.net/weixin_46703995/article/details/133138981
Recomendado
Clasificación