1. node.js의 역할,
I/O의 의미 (I/O는 키보드 유형 텍스트, 입력 및 텍스트가 화면에 표시되는 입력/출력의 약어입니다. 마우스 이동, 마우스가 움직이고 마우스가 화면에서 이동하고 말단 입력 및 출력 등) 등이 표시됩니다.
Node.js가 해결하고자하는 문제 (프로세스 입력, 높은 동시성. 예를 들어, 온라인 게임에는 수백만의 게이머가있을 수 있으며 수백만 개의 입력 등이있을 수 있습니다.
동시성의 의미 (동시성이라는 용어는 일이 동시에 발생하고 서로 상호 작용할 수 있음을 설명합니다. Node의 이벤트 I/O 모델은 멀티 스레드 비동기 I/O에서 연동 및 동시성의 일반적인 문제를 피할 수 있습니다)
데모 네트워크 I/O
JS 코드
var http = require ( 'http'), urls = [ 'www.baidu.com', 'www.10jqka.com.cn', 'www.duokan.com']; 함수 fetchpage (url) {var start = new date (); http.get ({host : url}, function (res) {console.log ( "got response :" + url); console.log ( "요청이 찍은 :", new date () - 시작, "ms"); } for (var i = 0; i <urls.length; i ++) {fetchpage (urls [i]); }node.js로 명명되었습니다
터미널에서 Node Node.js를 실행합니다
산출:
Node.js는 3 개의 URL에 액세스하고받은 응답과 시간을보고해야합니다.
출력 시간이 두 번 다르다는 것을 알 수 있습니다. 다양한 요인, DNS 요청 해결 시간, 바쁜 서버 프로그램 등의 영향을받습니다.
JavaScript가 이벤트 중심 언어 인 이유는 무엇입니까?
JavaScript는 원래 문서 개체 모델 (DOM)과 관련된 이벤트 아키텍처를 중심으로 진행됩니다. 개발자는 이벤트가 발생하면 일을 할 수 있습니다. 이러한 이벤트에는 요소를 클릭하는 사용자, 페이지로드 완료 등이 포함됩니다. 이벤트를 사용하여 개발자는 이벤트가 발생할 때 트리거되는 이벤트에 대한 청취자를 작성할 수 있습니다.
2. 콜백
1. 콜백이란 무엇입니까?
2. 콜백 분석
콜백은 기능을 다른 함수로 인수로 전달하는 것을 말하며 일반적으로 첫 번째 함수가 완료된 후에 호출됩니다.
예 : 예를 들어 jQuery의 hide () 메소드,
JS 코드
1, $ ( "P"). hide ( 'slow'); 2, $ ( "p"). hide ( 'slow', function () {alert ( "단락은 이제 숨겨져 있습니다"));콜백은 선택 사항입니다.
1 콜백이 필요하지 않습니다
2. 콜백이 있습니다. 단락이 숨겨지면 경고 프롬프트가 표시됩니다.
콜백이 있거나없는 코드의 차이를보기 위해
JS 코드
$ ( "p"). hide ( 'slow'); ALERT ( "단락은 이제 숨겨져 있습니다"); // 1 $ ( "P"). hide ( 'slow', function () {alert ( "단락은 이제 숨겨져 있습니다"); // 21. 콜백이없고 실행 순서는 동일합니다. 그러나 P 단락이 완전히 숨겨져 있지 않다는 것을 알 수 있습니다.
2. 콜백이 있으며, 가죽이 완료된 후에 실행이 완료됩니다.
콜백 분석
JS 코드
기능 Hasebreakfast (음식, 음료, 콜백) {console.log ( '' + food + ',' + drink의 barakfast가있는); if (Callback && typeof (Callback) === "function") {Callback (); }} hasbreakfast ( 'foast', 'coffee', function () {console.log ( '아침 식사. 일하러 갈 시간!');});산출:
거품이 많은 Barakfast, Coffeefinished Breakfast. 일하러 갈 시간!
다음은 세 가지 매개 변수로 생성 된 함수입니다. 세 번째 매개 변수는 콜백입니다.
Hasbreakfast 함수는 콘솔에 섭취 한 것을 기록한 다음 콜백 함수를 매개 변수로 호출합니다.
node.js에 콜백을 사용하는 방법
Node.js의 디스크에서 파일 콘텐츠를 읽기 위해 파일 시스템 모듈을 사용하는 예
JS 코드
var fs = 요구 ( 'fs'); fs.readfile ( 'somefile.txt', 'utf8', function (err, data) {if (err) trash err; console.log (data);});결과는 다음과 같습니다. somefile.txt의 내용.
1. FS (FileSystem) 모듈은 스크립트에서 사용하도록 요청됩니다.
2. 파일 시스템의 파일 경로는 fs.ReadFile 메소드의 첫 번째 매개 변수로 제공됩니다.
3. 두 번째 매개 변수는 UTF8이며 파일의 인코딩을 나타냅니다.
4. 콜백 함수를 fs.ReadFile 메소드의 세 번째 매개 변수로 제공합니다.
5. 콜백 함수의 첫 번째 매개 변수는 ERR이며 파일을 읽을 때 반환 된 오류를 저장하는 데 사용됩니다.
6. 콜백 함수의 두 번째 매개 변수는이를 치는 것이며 사용자는 읽기 파일에서 반환 된 데이터를 저장합니다.
7. 파일을 읽으면 콜백이 호출됩니다.
8. err가 참이면 오류가 발생합니다.
9. err가 false 인 경우 파일의 데이터를 사용할 수 있습니다.
10.이 경우 데이터는 콘솔에 기록됩니다.
또 다른 하나는 HTTP 모듈이며 HTTP 모듈은 개발자가 HTTP 클라이언트 및 서버를 만들 수 있습니다.
JS 코드
var http = 요구 ( 'http'); http.get ({host : 'shapeshed.com'}, function (res) {console.log ( "got 응답 :" + res.statuscode);}). on ( 'error', function (e) {console.log ( "got error :" + e.message);});결과 : GET 응답 : 200
1. 스크립트에 사용할 HTTP 모듈을 요청하십시오.
2. http.get () 메소드에 두 가지 매개 변수를 제공합니다
3. 첫 번째 매개 변수는 옵션 객체입니다. 이 예에서는 Shapeshed.com의 홈페이지를 가져와야합니다.
4. 두 번째 매개 변수는 응답이 매개 변수로 콜백 함수입니다.
5. 원격 서버가 해당 함수를 반환하면 콜백 함수가 트리거됩니다.
6. 콜백 함수에서 응답 상태 코드를 기록하십시오. 오류가 있으면 기록 할 수 있습니다.
다음으로, 4 가지 다른 I/O 작업이 진행되고 있음을 알 수 있습니다. 모두 콜백을 사용합니다.
JS 코드
var fs = require ( 'fs'), http = require ( 'http'); http.get ({host : 'www.baidu.com'}, function (res) {console.log ( "baidu.com");}). on ( 'error', function (e) {console.log ( "got error :" + e.message);}); fs.readfile ( 'somefile.txt', 'utf8', function (err, data) {if (err) trash err; console.log ( "somefile");}); http.get ({host : 'www.duokan.com'}, function (res) {console.log ( "duokan.com");}). on ( 'error', function (e) {console.log ( "got error :" + e.message);}); fs.readfile ( 'somefile2.txt', 'utf8', function (err, data) {if (err) trash err; console.log ( "somefile2");});어떤 작업이 먼저 반환되는지 알 수 있습니까?
추측은 디스크에서 읽은 두 파일이 네트워크에 입력 할 필요가 없기 때문에 먼저 반환되는 것입니다. 그러나 파일 크기를 알지 못하기 때문에 어떤 파일이 먼저 돌아올지 말하기가 어렵습니다. 두 개의 홈페이지를 획득하려면 스크립트가 네트워크에 들어가야하며 응답 시간은 예측할 수없는 많은 것들에 따라 다릅니다. Node.js 프로세스는 트리거되지 않은 등록 된 콜백이있을 때까지 종료되지 않습니다. 콜백은 먼저 예측 불가능 성을 해결하며 동시성을 처리하는 효율적인 방법입니다 (또는 한 번에 하나 이상의 일을 수행).
내 실행 결과는 다음과 같습니다
동기 및 비동기 코드
먼저 코드를보고 코드를 동기화 (또는 블록)
JS 코드
함수 수면 (milliseconds) {var start = new date (). gettime (); while ((new date (). gettime () start) <millioneconds) {}} 함수 fetchpage () {console.log ( 'fetching page'); 수면 (2000); Console.log ( '요청 페이지에서 반환 된 데이터'); } 함수 fetchapi () {console.log ( 'fetching api'); 수면 (2000); Console.log ( 'API에서 반환 된 데이터'); } fetchPage (); fetchapi ();스크립트가 실행되면 FetchPage () 함수가 호출됩니다. 돌아올 때까지 스크립트의 실행이 차단됩니다. FetchPage () 함수가 반환되기 전에 프로그램을 fetchapi () 함수로 이동할 수 없습니다. 이것을 차단 작업이라고합니다.
Node.js는이 코딩 스타일을 거의 사용하지 않지만 콜백을 비동기 적으로 호출합니다.
다음 코드를보십시오.
JS 코드
var http = 요구 ( 'http'); 함수 fetchpage () {console.log ( 'fetching page'); http.get ({host : 'www.baidu.com', path : '/? delay = 2000'}, function (res) {console.log ( '페이지 요청에서 반환 된 데이터').) } 함수 fetchapi () {console.log ( 'fetching api'); http.get ({host : 'www.baidu.com', path : '/? delay = 2000'}, function (res) {console.log ( 'API 요청에서 반환 된 데이터'). } fetchPage (); fetchapi ();이 코드가 허용되면 더 이상 FetchPage () 함수가 반환 될 때까지 기다리지 않으며 FetchApi () 함수가 즉시 호출됩니다. 콜백을 사용하여 코드가 차단됩니다. 일단 호출되면 두 기능 모두 원격 서버의 반환을 듣고 콜백 함수를 트리거합니다.
이러한 기능의 반환 순서는 보장 될 수 없지만 네트워크와 관련이 있습니다.
이벤트 루프
Node.js는 JavaScript의 이벤트 루프를 사용하여 옹호하는 비동기 프로그래밍 스타일을 지원합니다. 기본적으로 이벤트 루프를 사용하면 시스템이 콜백 기능을 먼저 저장 한 다음 향후 이벤트가 발생할 때 실행할 수 있습니다. 데이터베이스 반환 데이터 또는 HTTP 요청 반환 데이터 일 수 있습니다. 콜백 함수의 실행이 이벤트가 되돌릴 때까지 연기되므로 실행을 중지 할 필요가 없으며 제어 흐름이 노드 런타임 환경으로 돌아갈 수 있으므로 다른 일이 발생할 수 있습니다.
Node.js는 종종 네트워크의 데이터 흐름의 불확실성을 처리하도록 설계 되었기 때문에 네트워크 프로그래밍 프레임 워크로 간주됩니다. 이러한 설계에 기여하는 것은 이벤트 루프 및 콜백 사용이며, 네트워크 또는 I/O 이벤트에 응답하는 비동기 코드를 작성할 수있는 프로그래머와 같습니다.
따라야 할 규칙은 다음과 같습니다. 함수는 빠르게 반환해야하고 함수를 차단해서는 안되며 장기 실행 작업은 다른 프로세스로 이동해야합니다.
Node.js에 적합하지 않은 것은 많은 양의 데이터 처리 또는 오랫동안 계산을 실행하는 것이 포함됩니다. Node.js는 네트워크의 데이터를 푸시하고 즉시 완료하도록 설계되었습니다.