Node.js에서 웹 및 TCP 서버를 만드는 방법

亚连
풀어 주다: 2018-06-22 16:33:37
원래의
1154명이 탐색했습니다.

이 글에서는 Node.js를 사용하여 웹 서버와 TCP 서버를 만드는 방법과 처리 기술을 주로 소개합니다. 필요한 독자라면 배울 수 있습니다.

http 모듈을 사용하여 웹 서버 만들기

웹 서버 기능:

HTTP 요청 수락(GET, POST, DELETE, PUT, PATCH)

HTTP 요청 처리(직접 처리하거나 다른 프로그램에 요청) 처리)

응답(페이지, 파일, 다양한 유형의 데이터 등 반환)

일반적인 웹 서버 아키텍처:

Nginx, Apache: HTTP 요청을 수락하고, 요청을 처리할 사람을 결정하고, 반환하는 역할을 담당합니다. 요청 결과

php -fpm/php 모듈: 자신에게 할당된 요청을 처리하고 처리 결과를 할당자에게 반환합니다.

일반적인 요청 유형:

요청 파일: 정적 파일 포함(웹 페이지, 사진, 프론트 엔드 JavaScript 파일, CSS 파일... .) 및 프로그램에 의해 처리되는 파일

특정 작업 완료: 로그인, 특정 데이터 가져오기 등

Node.js 웹 서버:

수행하는 작업 다른 특정 웹 서버 소프트웨어(예: Apache, Nginx, IIS...)에 의존하지 않음

Node.js 코드는 요청 논리를 처리

Node.js 코드는 웹 서버의 다양한 "구성"을 담당함

Express 사용 웹 서버 생성

Simple Express 서버

정적 파일 서비스

routing

middleware

Simple Express 서버:

var express = require('express'); 
var app = express(); 
app.get('', function(req, res){ 
<span style="white-space:pre"> </span>res.end(&#39;hello\n&#39;); 
<span style="white-space:pre"> </span>}); 
<span style="white-space:pre"> </span>app.listen(18001, function afterListen(){ 
<span style="white-space:pre"> </span>console.log(&#39;express running on http://localhost:18001&#39;); 
<span style="white-space:pre"> </span>});
로그인 후 복사

정적 파일 범위:

웹 페이지, 일반 텍스트, 이미지, 프런트 엔드 JavaScript 코드, CSS 스타일 시트 파일, 미디어 파일, 글꼴 파일

Express를 사용하여 정적 파일에 액세스

<span style="white-space:pre"></span>app.use(express.static(&#39;./public&#39;));
로그인 후 복사

라우팅:

해당 처리 기능에 다양한 요청 할당

구별: 경로, 요청 방법

세 가지 라우팅 구현 방법:

경로: 상대적으로 간단함

Router: 비교 동일한 경로 아래의 여러 하위 경로에 적합

route: API에 더 적합

middleware

Connect: Node.js 미들웨어 프레임워크

계층 처리

각 계층이 구현 함수

TCP 서버 만들기

net 모듈을 사용하여 TCP 서버 만들기

telnet을 사용하여 TCP 서버에 연결

net을 사용하여 TCP 클라이언트 만들기

node.js를 사용하여 간단한 웹 구축 서버 JS 코드 부분:

var http = require(&#39;http&#39;);
var url = require(&#39;url&#39;);
var path = require(&#39;path&#39;);
var fs = require(&#39;fs&#39;);
var dir, arg = process.argv[2] || &#39;&#39;; // 命令行第三个参数,用来接收目录,可为空,相对当前server.js文件的目录名称
// 比如使用命令 node server debug,意思就是debug文件夹与server.js文件同级
// 且你想以debug文件夹启动web服务
 
http.createServer(function (req, res) {
var pathname = __dirname + url.parse(req.url).pathname;
dir = dir ? dir : pathname; // 记住dir(目录)
pathname = dir ? pathname.replace(dir, dir + arg + &#39;/&#39;) : pathname; // 替换文件静态路径
if (path.extname(pathname) == "") {
pathname += "/";
}
if (pathname.charAt(pathname.length - 1) == "/") {
pathname += "index.html"; // 入口文件,此处默认index.html
}
 
fs.exists(pathname, function (exists) {
if (exists) {
switch (path.extname(pathname)) {
case ".html":
res.writeHead(200, {"Content-Type": "text/html"});
break;
case ".js":
res.writeHead(200, {"Content-Type": "text/javascript"});
break;
case ".css":
res.writeHead(200, {"Content-Type": "text/css"});
break;
case ".gif":
res.writeHead(200, {"Content-Type": "image/gif"});
break;
case ".jpg":
res.writeHead(200, {"Content-Type": "image/jpeg"});
break;
case ".png":
res.writeHead(200, {"Content-Type": "image/png"});
break;
default:
res.writeHead(200, {"Content-Type": "application/octet-stream"});
} 
// res可以自己添加信息来简单交互 比如可以修改点header信息 或者修改返回的资源数据
fs.readFile(pathname, function (err, data) {
res.end(data);
});
}
else {
res.writeHead(404, {"Content-Type": "text/html"});
res.end("<h1>404 Not Found</h1>");
}
});
}).listen(8085, "127.0.0.5"); // 服务器端口
console.log("server running at http://127.0.0.5:8085/");
로그인 후 복사

위 내용은 제가 여러분을 위해 편집한 내용입니다. 앞으로 모든 사람에게 도움이 되기를 바랍니다.

관련 기사:

laydate.js에서 경로 로드 중 오류

vue-router에서 경로 매개변수 전달을 구현하는 방법

jQuery를 사용하여 셀 병합을 달성하기 위해 테이블을 작동하는 방법

위 내용은 Node.js에서 웹 및 TCP 서버를 만드는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
최신 이슈
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿
회사 소개 부인 성명 Sitemap
PHP 중국어 웹사이트:공공복지 온라인 PHP 교육,PHP 학습자의 빠른 성장을 도와주세요!