国产亚洲精品福利在线无卡一,国产精久久一区二区三区,亚洲精品无码国模,精品久久久久久无码专区不卡

當(dāng)前位置: 首頁(yè) > news >正文

專(zhuān)業(yè)醫(yī)院網(wǎng)站建設(shè)百度網(wǎng)盤(pán)下載

專(zhuān)業(yè)醫(yī)院網(wǎng)站建設(shè),百度網(wǎng)盤(pán)下載,網(wǎng)站銷(xiāo)售如何做業(yè)績(jī),金融直播室網(wǎng)站建設(shè)文章目錄 前言1.安裝Node.js環(huán)境2.創(chuàng)建node.js服務(wù)3. 訪問(wèn)node.js 服務(wù)4.內(nèi)網(wǎng)穿透4.1 安裝配置cpolar內(nèi)網(wǎng)穿透4.2 創(chuàng)建隧道映射本地端口 5.固定公網(wǎng)地址 轉(zhuǎn)載自?xún)?nèi)網(wǎng)穿透工具的文章:使用Nodejs搭建HTTP服務(wù),并實(shí)現(xiàn)公網(wǎng)遠(yuǎn)程訪問(wèn)「內(nèi)網(wǎng)穿透」 前言 Node.js…

文章目錄

  • 前言
  • 1.安裝Node.js環(huán)境
  • 2.創(chuàng)建node.js服務(wù)
  • 3. 訪問(wèn)node.js 服務(wù)
  • 4.內(nèi)網(wǎng)穿透
    • 4.1 安裝配置cpolar內(nèi)網(wǎng)穿透
    • 4.2 創(chuàng)建隧道映射本地端口
  • 5.固定公網(wǎng)地址

轉(zhuǎn)載自?xún)?nèi)網(wǎng)穿透工具的文章:使用Nodejs搭建HTTP服務(wù),并實(shí)現(xiàn)公網(wǎng)遠(yuǎn)程訪問(wèn)「內(nèi)網(wǎng)穿透」

前言

Node.js 是能夠在服務(wù)器端運(yùn)行 JavaScript 的開(kāi)放源代碼、跨平臺(tái)運(yùn)行環(huán)境。Node.js 由 OpenJS Foundation(原為 Node.js Foundation,已與 JS Foundation 合并)持有和維護(hù),亦為 Linux 基金會(huì)的項(xiàng)目。Node.js 采用 Google 開(kāi)發(fā)的 V8 運(yùn)行代碼,使用事件驅(qū)動(dòng)、非阻塞和異步輸入輸出模型等技術(shù)來(lái)提高性能,可優(yōu)化應(yīng)用程序的傳輸量和規(guī)模。這些技術(shù)通常用于資料密集的即時(shí)應(yīng)用程序。

Node.js 大部分基本模塊都用 JavaScript 語(yǔ)言編寫(xiě)。在 Node.js 出現(xiàn)之前,JavaScript 通常作為客戶端程序設(shè)計(jì)語(yǔ)言使用,以JavaScript 寫(xiě)出的程序常在用戶的瀏覽器上運(yùn)行。Node.js 的出現(xiàn)使 JavaScript 也能用于服務(wù)端編程。Node.js 含有一系列內(nèi)置模塊,使得程序可以脫離 Apache HTTP Server 或 IIS,作為獨(dú)立服務(wù)器運(yùn),下面將介紹如何簡(jiǎn)單幾步實(shí)現(xiàn)遠(yuǎn)程公共網(wǎng)絡(luò)下訪問(wèn)windwos node.js的服務(wù)端。

1.安裝Node.js環(huán)境

官網(wǎng)下載node.js,我們選擇64位一鍵安裝

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

image-20230302141011787

安裝好后我們打開(kāi)cmd,輸入命令有正常出來(lái)版本號(hào),表示安裝成功,一鍵安裝版,默認(rèn)會(huì)配置環(huán)境變量。

node -v

image-20230302150424377

2.創(chuàng)建node.js服務(wù)

這里我們?cè)诒镜貏?chuàng)建一個(gè)簡(jiǎn)單的nodejs服務(wù),創(chuàng)建一個(gè)貪吃蛇頁(yè)面小游戲來(lái)進(jìn)行演示。

首先在本地創(chuàng)建一個(gè)文件夾,并在文件夾中新建2個(gè)文件,一個(gè)是js文件和一個(gè)html文件,需要放在同個(gè)目錄下,然后使用vscode打開(kāi)。

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

image-20230302155043387

game.html添加如下html代碼并保存,以下代碼是一個(gè)html頁(yè)面小游戲(貪吃蛇)

<!DOCTYPE html>
<html>
<head><title>貪吃蛇</title><meta charset="UTF-8"><meta name="keywords" content="貪吃蛇"><meta name="Description" content="這是一個(gè)初學(xué)者用來(lái)學(xué)習(xí)的小游戲"><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 =[];//定義一條蛇,畫(huà)蛇的身體var snakeCount = 6;//初始化蛇的長(zhǎng)度var foodx =0;var foody =0;var togo =0;function drawtable()//畫(huà)地圖的函數(shù){for(var i=0;i<60;i++)//畫(huà)豎線{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++)//畫(huà)橫線{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++)//畫(huà)蛇的身體{ctx.fillStyle="#000";if (k==snakeCount-1){ctx.fillStyle="red";//蛇頭的顏色與身體區(qū)分開(kāi)}ctx.fillRect(snake[k].x,snake[k].y,15,15);//前兩個(gè)數(shù)是矩形的起始坐標(biāo),后兩個(gè)數(shù)是矩形的長(zhǎng)寬。}//繪制食物	ctx.fillStyle ="black";ctx.fillRect(foodx,foody,15,15);ctx.fill();}function start()//定義蛇的坐標(biāo){//var snake =[];//定義一條蛇,畫(huà)蛇的身體//var snakeCount = 6;//初始化蛇的長(zhǎng)度for(var k=0;k<snakeCount;k++){snake[k]={x:k*15,y:0};}drawtable();addfood();//在start中調(diào)用添加食物函數(shù)}function addfood(){foodx = Math.floor(Math.random()*60)*15; //隨機(jī)產(chǎn)生一個(gè)0-1之間的數(shù)foody = Math.floor(Math.random()*40)*15;for (var k=0;k<snake;k++){if (foodx==snake[k].x&&foody==sanke[k].y)//防止產(chǎn)生的隨機(jī)食物落在蛇身上{	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();//刪除數(shù)組第一個(gè)元素ctx.clearRect(0,0,900,600);//清除畫(huà)布重新繪制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()//吃到食物后長(zhǎng)度加1{if(snake[snakeCount-1].x==foodx&&snake[snakeCount-1].y==foody){addfood();snakeCount++;snake.unshift({x:-15,y:-15});}}//死亡函數(shù)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()//調(diào)用函數(shù)
{ start();setInterval(move,150);drawtable();}
</script>
</body>
</html>

nodetest.js文件添加如下js代碼,以下代碼意思是開(kāi)啟一個(gè)http服務(wù),設(shè)置監(jiān)聽(tīng)3000端口號(hào)

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. 訪問(wèn)node.js 服務(wù)

當(dāng)我們編寫(xiě)好相關(guān)代碼后,我們開(kāi)始啟動(dòng)服務(wù).在vscode控制臺(tái)輸入命令【注意需要進(jìn)入到相應(yīng)的文件目錄下執(zhí)行命令】

node .\nodetest.js

image-20230302170633966

有正常返回提示服務(wù)在本地3000端口下,我們打開(kāi)瀏覽器,訪問(wèn)http://127.0.0.1:3000/,出現(xiàn)貪吃蛇界面表示成功【游戲控制:鍵盤(pán)上下左右鍵】

image-20230302171105342

4.內(nèi)網(wǎng)穿透

這里我們使用cpolar來(lái)進(jìn)行內(nèi)網(wǎng)穿透,支持http/https/tcp協(xié)議,不限制流量,無(wú)需公網(wǎng)IP,也不用設(shè)置路由器,使用簡(jiǎn)單。

4.1 安裝配置cpolar內(nèi)網(wǎng)穿透

cpolar官網(wǎng):https://www.cpolar.com/

訪問(wèn)cpolar官網(wǎng),注冊(cè)一個(gè)賬號(hào),然后下載并安裝客戶端,具體安裝教程可以參考官網(wǎng)文檔教程。

  • windows系統(tǒng):在官網(wǎng)下載安裝包后,雙擊安裝包一路默認(rèn)安裝即可。
  • linux系統(tǒng):支持一鍵自動(dòng)安裝腳本,詳細(xì)請(qǐng)參考官網(wǎng)文檔——入門(mén)指南

20230130105715

4.2 創(chuàng)建隧道映射本地端口

cpolar安裝成功后,在瀏覽器上訪問(wèn)本地9200端口http://localhost:9200,使用cpolar郵箱賬號(hào)登錄。

20230130105810

點(diǎn)擊左側(cè)儀表盤(pán)的隧道管理——?jiǎng)?chuàng)建隧道,創(chuàng)建一個(gè)指向本地3000端口的http隧道

  • 隧道名稱(chēng):可自定義命名,注意不要與已有的隧道名稱(chēng)重復(fù)
  • 協(xié)議:選擇http
  • 本地地址:3000
  • 域名類(lèi)型:免費(fèi)選擇隨機(jī)域名
  • 地區(qū):選擇China vip

點(diǎn)擊創(chuàng)建

image-20230302171633772

隧道創(chuàng)建成功后,點(diǎn)擊左側(cè)的狀態(tài)——在線隧道列表,查看所生成的公網(wǎng)地址,然后復(fù)制地址

image-20230302171740715

打開(kāi)瀏覽器器,我們使用上面公網(wǎng)地址進(jìn)行訪問(wèn),至此,我們成功將本地·node.js 服務(wù)發(fā)布到了公網(wǎng)地址

image-20230302171817498

5.固定公網(wǎng)地址

由于以上使用cpolar所創(chuàng)建的隧道使用的是隨機(jī)公網(wǎng)地址,24小時(shí)內(nèi)會(huì)隨機(jī)變化,不利于長(zhǎng)期遠(yuǎn)程訪問(wèn)。因此我們可以為其配置二級(jí)子域名,該地址為固定地址,不會(huì)隨機(jī)變化。

  • 保留一個(gè)二級(jí)子域名

登錄cpolar官網(wǎng),點(diǎn)擊左側(cè)的預(yù)留,選擇保留二級(jí)子域名,設(shè)置一個(gè)二級(jí)子域名名稱(chēng),點(diǎn)擊保留,保留成功后復(fù)制保留的二級(jí)子域名名稱(chēng)

image-20230302172317079

保留成功后復(fù)制保留的二級(jí)子域名地址

image-20230302172454064

  • 配置二級(jí)子域名

訪問(wèn)http://127.0.0.1:9200/,登錄cpolar web UI管理界面,點(diǎn)擊左側(cè)儀表盤(pán)的隧道管理——隧道列表,找到所要配置的3000隧道,點(diǎn)擊右側(cè)的編輯

image-20230302172856768

修改隧道信息,將保留成功的二級(jí)子域名配置到隧道中

  • 域名類(lèi)型:選擇二級(jí)子域名
  • Sub Domain:填寫(xiě)保留成功的二級(jí)子域名

點(diǎn)擊更新

image-20230302172806823

更新完成后,打開(kāi)在線隧道列表,此時(shí)可以看到公網(wǎng)地址已經(jīng)發(fā)生變化,地址名稱(chēng)也變成了保留過(guò)的二級(jí)子域名名稱(chēng),將其復(fù)制下來(lái)

image-20230302172935943

然后使用固定http地址打開(kāi)瀏覽器訪問(wèn)

image-20230302173012863
訪問(wèn)成功,現(xiàn)在這個(gè)公網(wǎng)地址是固定的了,不會(huì)隨機(jī)變化。成功通過(guò)cpolar內(nèi)網(wǎng)穿透,實(shí)現(xiàn)在外遠(yuǎn)程訪問(wèn)nodejs服務(wù),無(wú)需公網(wǎng)IP ,也不用設(shè)置路由器。

http://m.aloenet.com.cn/news/37346.html

相關(guān)文章:

  • 太原市做網(wǎng)站公司微信營(yíng)銷(xiāo)軟件手機(jī)版
  • 企業(yè)做網(wǎng)站大概多少錢(qián)湖南關(guān)鍵詞網(wǎng)絡(luò)科技有限公司
  • plone wordpressseo人工智能
  • 平易云 網(wǎng)站建設(shè)看廣告賺錢(qián)
  • 政府網(wǎng)站建設(shè)培訓(xùn)講話惠州優(yōu)化怎么做seo
  • 漂亮企業(yè)網(wǎng)站源碼關(guān)鍵詞優(yōu)化排名軟件
  • 網(wǎng)站設(shè)計(jì)概述500字關(guān)鍵詞批量調(diào)詞軟件
  • 學(xué)生做爰網(wǎng)站微信群推廣網(wǎng)站
  • 專(zhuān)業(yè)鄭州做網(wǎng)站的公司今日國(guó)家新聞
  • 動(dòng)態(tài)網(wǎng)站開(kāi)發(fā)結(jié)束語(yǔ)東莞優(yōu)化怎么做seo
  • 彩票網(wǎng)站建設(shè)方案看網(wǎng)站時(shí)的關(guān)鍵詞
  • 百度競(jìng)價(jià) 十一 pc網(wǎng)站 手機(jī)網(wǎng)站seo技術(shù)團(tuán)隊(duì)
  • 岳陽(yáng)市委網(wǎng)站免費(fèi)seo網(wǎng)站推廣在線觀看
  • 湛江網(wǎng)站設(shè)計(jì)模板視頻500個(gè)游戲推廣群
  • 網(wǎng)站互動(dòng)營(yíng)銷(xiāo)成人編程培訓(xùn)機(jī)構(gòu)排名前十
  • 融資是什么意思株洲seo優(yōu)化報(bào)價(jià)
  • 馬云1688網(wǎng)站在濮陽(yáng)如何做圖片外鏈在線生成
  • 大型b2c網(wǎng)站開(kāi)發(fā)百度推廣app下載官方
  • 怎么做領(lǐng)券網(wǎng)站上海知名seo公司
  • 電腦做網(wǎng)站電腦編程百度指數(shù)怎么提升
  • 手機(jī)視頻網(wǎng)站怎么做保定seo推廣公司
  • 尚云網(wǎng)站建設(shè)廣東網(wǎng)約車(chē)漲價(jià)
  • 可以做書(shū)的網(wǎng)站湘潭seo優(yōu)化
  • 網(wǎng)站建設(shè) 加強(qiáng)宣傳百度開(kāi)戶資質(zhì)
  • 昆明網(wǎng)站建設(shè)_云南網(wǎng)站建設(shè)網(wǎng)頁(yè)設(shè)計(jì)制作
  • 服務(wù)器做兩個(gè)網(wǎng)站電視劇排行榜百度搜索風(fēng)云榜
  • 做網(wǎng)站需要哪些知識(shí)論述搜索引擎優(yōu)化的具體措施
  • asp網(wǎng)站建設(shè)實(shí)驗(yàn)設(shè)計(jì)推廣軟文是什么意思
  • 論述制作網(wǎng)站的一般過(guò)程百度移動(dòng)端關(guān)鍵詞優(yōu)化
  • title wordpress企業(yè)站seo價(jià)格