>> 케빈 슈 미드 : 여러분 안녕하세요.
CS50 세미나에 오신 것을 환영합니다 Node.js.에
내 이름은 케빈입니다.
나는 CS50의 TF 해요.
그리고 종류의 정말 흥분 같이 해요 이번 세미나에 대한.
나는 Node.js 아주 멋진 생각합니다.
나는이 세미나 사용할 수 있기를 바랍니다 에 대한 좋은 것 같아요, 발판으로
최종 프로젝트의 경우 일부 당신이 사용에 관심
Node.js. 같은
>> 우리는 정렬 세미나를 시작합니다 단지 약간의 이야기
배경의 확장 성을 가지 다음 Node.js의 관점, 그리고
우리는 몇 가지 코드 예제로 이동합니다.
그리고 웹 사이트에 코드를해야합니다, 당신은 코드를 볼 수 있습니다.
그리고 세미나 후에, 나는 이야기 정렬합니다 당신은 Node.js를 설정하는 방법에 대한
컴퓨터.
>> OK.
그래서 지금 당장 시작하자.
그래서 난 그냥 얘기하고 싶지 추측 웹 서버, 정말 처음.
그리고이 토론을 시작하기 위해, 기본적으로 출신도있다
CS61에 사용되는 교과서, 어떤 기본적 상호 작용을 도시
웹과 같은 클라이언트 프로세스 사이 브라우저 나 당신의 목표 클라이언트 또는 같은
그런 식으로, 그리고 웹 서버.
따라서이 종류의 유사합니다 당신의 강의에서 본 그림
수요일 곳 기본적으로 우리는 몇 가지가 구글 크롬과 같은 클라이언트 프로세스.
>> 다음 단계의 하나입니다 클라이언트는 요청을 보냅니다.
그래서 뭔가처럼 잘하자이 될 수 있습니다 방문, 나는 CS50.net 몰라.
그래서 우리는 그 요청을 실행합니다.
그리고 아무도 이름을 기억 않습니다 어떻게 그런 일을 지정하는 프로토콜
요청을 구성해야 하는가?
네.
>> 청중 : [청취].
>> 케빈 슈 미드 : 그렇지.
그래서 그것은 바로, HTTP처럼?
방법에 대한 그래서 기본적으로 사양 해당 요청은 실제로 배치해야
하기 때문에 일의 끝에 그 요구는 정말 그냥 좋아하는
문자열이 기본적으로 나는이 원하는 말한다.
그리고 사양 그것을 위해 HTTP입니다.
그래서 프로토콜 같아요.
>> 그럼 서버는 수신 그 요구.
그래서 너희들은 웹 서버가 설치되어 CS50 어플라이언스에.
그것은 아파치의.
이번 주 당신은 문제에 작업 할 때 일곱 설정, 당신은 실제로 작동 할 수 있습니다
해당 웹 서버와.
그래서 서버는 그 요청을 수신하고, 다음은 종류의 스크래치가 그
머리와 무엇을 잘 같은 말 나는이 함께 할 수 있습니까?
>> 그래서 다음 어떤 결정을 기반으로 그것은 어떤 종류의 문의해야 할 수 있습니다
자원.
그리고 그 자원이 될 수있다 여러 가지 많은.
하나, 그것은있을 수 단지 정적 HTML 파일 등을들 수있다.
그래서 좀처럼 될 수있다 용처럼 HTML
귀하의 개인 웹 사이트.
그것은 이미지와 같은 정적 파일이 될 수 또는 당신이 영화처럼.
심지어 이야기 할 수 데이터베이스의 어떤 종류에
MySQL 데이터베이스 등을들 수있다.
그래서 항상 의사 소통을 할 필요가 없습니다 자원 만에와
어떤 경우에는, 그것은 수 있습니다.
>> 그래서 그 때 할 무슨 그 후는 것입니다
응답을 보냅니다.
그리고 이것에 대한 응답은 또한 HTTP에서 지정한.
따라서 클라이언트는 그것을받을 수 있습니다.
그것은 산산조각하고 처리 할 수​​ 있습니다.
그리고 당신은 웹 페이지를 얻을 같은 구글이나 CS50.net 또는
당신은에 가서 뭐든간에.
OK?
>> 그래서이 기본 상호 작용입니다 우리는 처리 할 것입니다.
그리고 우리는 꽤 많이 될 것입니다 이 부분에 초점을
상호 작용, 서버.
OK.
쿨.
아무도 지금까지 질문이?
OK.
>> 그래서 우리는, 상기와 같이 웹 서버는 수신 다음이 HTTP 요청과는이 문제
HTTP 응답.
그리고 같은 우리는 이전에 대한 이야기 CS50 어플라이언스의 웹 서버는 아파치입니다.
너희들이 작업 그래서 P는 일곱 설정 당신은 작업을 할거야
아파치 웹 서버.
당신은 정말 일을하지 않을께요 직접 너무 많은 아파치.
당신은 종류의 아파치 조금 구성 가상 호스트 또는 지정하는 경우
V 호스트, 우리는거야 조금에 해당합니다.
>> 그러나 기본적으로, 아파치 웹 서버 PHP의 종류와 작동하도록 설정
의 상자 밖으로.
당신이 갈 때 그래서 정말 일이 있습니다 말하자면, 같은 귀하의 웹 사이트 중 하나에,
로컬 호스트 슬래시의 index.php 또는 뭔가, 브라우저가 전송입니다
요청하고 아파치 앉아있다 거기는 함께 할 수 파악한다.
그리고 작업을 실행하는 것입니다 그 index.php 파일의 코드와
다음 다시 전원을 보낼 수 있습니다.
그래서이있다.
그래서 우리는 종류의이 이야기.
그래서 그냥 정적 파일을 제공 할 수 또는 문제를 다음 몇 가지 PHP 코드를 실행하고
응답.
>> 올 수 그럼 일반적인 질문 업이 잘, 어떻게 우리가 정말 다루는가
여러 사용자를 갖는 동시에?
당신은 웹을 작성하는 경우 그래서 상상 서버, 웹 서버가 있다면 그
당신이 뭔가에 쓰려고했다 C 또는 그런 일처럼,
기본적으로 당신이 생각 할 수있는 방법이 코드의 일종이 될 수 있다고
다음 요청을받을 수 있지만 것 그것은 모든이 작업을 수행 할 수 있습니다.
그것은 예를 들어, 문의해야 할 수 있습니다 데이터베이스 또는 그런 일.
오른쪽?
그리고, 그것은 그런 종류의 할 것 처리 후
응답을 보냈습니다.
그래서 높은처럼 수준의 개요를 제공합니다.
>> 그러나 즉시 명백하지 않다면, 어떻게 수행 할 수 있도록 이명 또는
심지어 천명이 함께 일할 수있는 당신의 동시에, 웹 서버.
그래서 아파치가 사용하는 솔루션 스레드 또는 프로세스라고합니다.
그래서 당신이 들어있을 수 있습니다 전에이 기간.
그것은 당신이하지 않은 경우 OK, 그러나 단지 생각 위한 방법으로 스레드 또는 프로세스에 대한
운영 체제 또는 사용자 프로그램 또는 그런 일 또는 웹 서버
종류의 복수를 실행합니다 한 번에 일.
그래서 당신은 용어를 들어있을 수 있습니다 실행 스레드있다.
당신이있는 것처럼 그래서 종류의 멀티 태스킹의 일종.
>> 그리고 당신의 상자를 본 적이 경우 노트북, 또는 그런 식으로,
당신이 할 수있는 멀티 코어는, 당신이 할 수 있습니다 서로 다른 두 개의 서로 다른 스레드를 실행할
CPU의 부품은 할 수 있도록 실제로 같은 시간에 일어난다.
그래서이 정말 강력합니다.
그리고 이것은 아파치의 종류입니다 이 문제에 대한 솔루션을 제공합니다.
>> 그래서 종류의 문제처럼가 하지만이 방법?
그래서 내가 종류의 그곳을 쓴 것 같아요.
그러나 둘 다 종류의 많은 메모리를 사용합니다.
그것은 생성하는 것은 매우 비싸다 스레드 또는 프로세스.
>> 그리고 추론의 일부입니다 단지 같은 당신은 C 프로그램을 실행 할 때
주 추천하고 그 통화 또 다른 기능은, 그 보유
스택의 일종.
그래서 스레드는 전적으로이 필요합니다 별도의 스택하는
매우 클 수 있습니다.
그리고 당신이 상상할 수있는 경우의 톤을 가지고 귀하의 웹 사이트의 사용자는, 당신은 것
다른 스레드의 많은.
즉, 스택에 많은의 관리 및 유지 보수.
그래서 큰 메모리 소모합니다.
>> 그리고, 또한,의는 만 있다고 가정 해 봅시다 하나의 CPU, 또는의 당신이 있다고 가정 해 봅시다
당신보다 더 많은 스레드 이러한 멀티 코어.
오른쪽?
그래서 당신이 10 스레드를 먹었지 당신은 단지 CPU가 5 개 있었다.
당신은 종류의이 일을해야 할 곳 당신은 현재의 전환
당신 때문에 실행중인 하나 한 번에 10을 실행할 수 없습니다.
그리고는 컨텍스트 스위치라고.
그리고 그 용어는 실제로 몇가 다른 컨텍스트,하지만 단지하자
전환으로 생각 두 개의 스레드 사이.
즉, 꽤 비싼 될 수 있기 때문에 기본적으로 당신이해야 할 일은 당신입니다
당신이 무슨 일을하는지 중지해야에게 저장 그 실행중인 스레드의 상태 및
그런 다음 다른 곳으로 전환합니다.
>> 그래서 모두가 이러한 종류의 볼 않습니다 왜 스레드 및 동기 부여
프로세스는 약간의 부피가 될 수 있을까요?
그리고 당신은 질문이있는 거죠?
OK.
쿨.
질문 있나?
OK.
>> 그래서 우리는 잠시 뒤 조치를 취할 경우, 종류의 같은있다
우리가 할 수있는 관찰 웹 응용 프로그램의 많은.
그리고 그것은 정말로 그 그들 중 많은 실제로하지 않는 매우 유용
실의 내부에서 작업.
그래서 누구에 시작 P는 전혀 일곱을 설정?
그래서 당신은 아마 설명할까요 일부 부품은?
당신은 로그인에 근무 또는 그런 식으로 뭔가?
>> 청중 : 호
>> 케빈 슈 미드 : OK.
마음 마십시오.
미안 해요.
그러나 기본적으로, P 세트에, 당신이있어 일종의을 많이 만드는 될 것
몇 가지를 얻을 수있는 데이터베이스에 쿼리 해당 데이터베이스에서 정보.
어떤 코드가 일을 할 것입니다, 그 무엇 아파치 프로세스 또는
아파치 스레드는 일을 할 거라고 그것은 연락하는 동안
데이터베이스는 정렬 될 것입니다 거기에 앉아 해가 될 것
데이터베이스가 응답을 기다리고.
>> 이제 그 큰 같은 소리하지 않을 수 있습니다 데이터베이스가에 있기 때문에 거래
CS50 기기, 오른쪽?
그러나 네트워크의 어떤 종류가있다 이 대기 시간 현재 웹 때문에
서버에 자신의 요청을 실행하는 와 통신하는 데이터베이스
데이터베이스 및 그 얻을 정보를 다시.
그래서 지금은 제가 잘 날 기다려 마치 갈은 뭔가를 얻을 수
데이터베이스 및 다음 거기에 진행 기다리는 많은.
그 의미가 있습니까?
>> 일부 정보는 나쁘지 않다.
그냥하는 경우, 예를 들면, 액세스 메모리, 그 게 아니에요
끔찍한 I / O 대기 시간.
내가 말할 때, I / O 대기 시간, 난 무엇을 을 참조하는 등의 모든 종류처럼
입출력.
그러나 같은 디스크에있는 파일에 액세스 할 나는 정적 HTML을 제공하려는 경우
파일이 내 웹 페이지에 있던 나 그런 식으로, 내가 먹을 수도
약간의 중지, 해당 파일을 읽을 디스크에서 다음에있는
그 과정은 내가 기다리고 있어요.
나는 유용한 작업을하고 있지 않다.
>> 이것은 모든 것의 사실이 아니다, 그러나 P 세트와 같은 응용 프로그램에서 일반적입니다
일곱 많은 응용 프로그램 당신이하지 않은 것을
실제로 많은 생각을하고.
내가 생각을 말할 때, 내 말은 전산 작업 등을들 수있다.
그래서 계산 작업은 무엇인가이 될 수 같은 말, 당신은 싶었어요
단지 계산 웹 서버를 만들 n 번째 피보나치 수.
이는 특히 같은 소리하지 않습니다 재미 웹 서버.
마치 내가 그 사이트가 될 기대하지 않을 것이다 다음 페이스 북,하지만 몇 가지입니다
전산 작업의 일종.
>> 그리고 당신과 함께 그 대체 상상할 수 흥미있는 다른 종류의
전산 작업.
이제 당신이 뭔가를 작성했다 가정 해 봅시다 그 정도의 계산
두 사람 사이에 분리 또는 그런 일.
그래서 어떤 종류를 포함하지 계산, 오른쪽?
그리고 그렇다하더라도, 당신은 여전히​​ 것을해야 할 일 어쩌면 기다리고을 많이 할
당신이 볼 수있는 데이터베이스를 조회해야 까지 누가 누군지과 친구의
그런 식으로.
그래서 개념의 종류가있다 전산 작업.
그 의미가 있습니까?
아무도 질문이 있습니까?
>> 아, 그리고 내가 거기 채팅 서버를두고 추측 채팅 서버의 종류 때문에
이것의 또 다른 좋은 예.
채팅 서버가 없습니다 많은 생각을 할 수 있습니다.
그것은 단지 사람 기다려야합니다 메시지 후 때를 보내
그들은 보낼 않습니다.
OK?
>> 그래서 그냥 다시 정리하자면, 아파치와 그 포크와 같은 유사한 웹 서버
스레드와 프로세스를 많이하는 종류의 낭비가 될 수 있습니다.
그래서 올 수 문제를 생각한다 그 중에서 우리가 필요가있다
다중 스레드 및 프로세스?
우리가 하나를했다면?
>> 그럼 종류의 그림을 그릴 수 있도록 이 어떻게 보이는지의.
그럼 하나의 스레드를 사용하자.
OK?
그래서 하나의 스레드와이 상상.
>> 의 우리가 정말 일을하지 않은 가정하자 그만큼 유용한 - 내가 말을 할 때
유용, 내가 계산 작업을 의미 -
전에 이러한 여러 스레드에서.
그럼 종류의 통합하자 하나의 스레드에 모든 것을.
그래서 우리는 하나의 스레드 그 종류가 있다면 단지 루프 주위에 간다
지속적으로 점검 작업을 수행했습니다 새로운 일이.
그래서 예를 들어, 뭔가 새로운 일이 난에서 다시 뭔가있어 의미 할 수
전송 데이터베이스 또는 누군가 나 새로운 HTTP 요청.
그래서 그 이벤트의 일종이다 맞아, 어떻게?
>> 그리고 내가 할 수있는 경우에 그 새로운 일어날 일이 같은 스레드에
실행이 단일 스레드의 실행, 나는 몇 가지 코드를 호출 할 수
특정 일을 처리 할 것입니다.
그래서 예를 들어, 내가 뭔가를 얻었다면 다시 데이터베이스에서, 나는 실행할 수 내
그것의 작은 계산 부분이 실제로 단지에 일을 준비합니다
사용자에게 다시 보낼 수 있습니다.
그래서 메이크업 감각의 종류는 무엇입니까?
>> 하지만 실제로는 무엇인가 이것의 의미?
오른쪽?
우리가 작성한 때문에 코드가 많이 -
난 그냥 앞으로 뛰어 갈거야 그 확인의 경우 슬라이드에.
당신이 괜찮다면 그래서, 난 그냥 다시 조치를 취할 것.
그래서 이런 종류의 일입니다 이벤트 루프했다.
OK?
그리고 기본적인 종류의 Node.js. 뒤에 아이디어
>> Node.js는 정말 웹으로하고있다 그래서 서버는 단일 스레드 거기에있다
즉, 기본적으로 루프를 돌고있다 아래의 동안 한 종류의 같은
끊임없이의 Node.js의 후드 확인, 우리는 새로운 물건을 받았 는가?
그리고, 그것은 처리기를 실행합니다 당신은 설정하는 것이.
하지만 물어 좋은 질문은, 어떻게 이런 일이 일어날 수 있습니다
기존의 것들과?
>> 그래서 나는 여기에서 C 코드의 라인을 넣어 그 이 열기처럼 기본적으로 보이는
오른쪽 파일?
나는 그녀는 앨범 나왔다.
그래서 나는 그녀에게 새로운 파일을 열 수 있었다.
그래서 방법 운영에 대한 우리의 C 코드 -
그리고 내가 파일을 선택한 이유는이었다고 생각한다 이 정도의 일종이기 때문에
우리가 C에서 수행 한 I / O 작업의 입력 출력이 있다는 것을 의미.
그래서 우리는이 코드를 호출하는 이 F는 열리지 않습니다.
그리고 우리의 다음 줄에 이 프로그램은, 지금 우리가 F로 작업 할 수 있습니다.
>> 그래서이 뭔가의 예 것 그 동기 나처럼
그 첫 번째 줄에 있기 때문에 차단 거기에 우리는 우리가 때까지 기다리는
파일이 열려 얻을.
그래서 두 번째 줄에, 우리가 알고있는 우리 F에서 작동하지만, 이것은 의미 수
그 두 번째 줄은 정말 실행할 수 없습니다 첫 번째 줄은 완료 될 때까지.
그 의미가 있습니까?
>> 그래서이 넣어 나쁜 것 이벤트 처리기에서.
그리고 그 이유이다 대기의 종류, 오른쪽?
그래서 이것은 우리를 다시 되돌릴 것 같은 일을.
그리고 지금 우리조차하지 않았을 다중 스레드의 이익 또는
프로세스를 우리가 가지고 있기 때문에 Node.js.에 하나의 스레드
그 모두에게 의미가 있습니까?
>> 청중 : 잠깐.
그래서 대체 무엇입니까?
>> 케빈 슈 미드 : 오, 그래.
그래서 난에 도착하는거야 교체.
OK.
우리는 무언가를했다 그래서 경우 즉,이처럼 보였다?
그래서 내가 지금 편집하는 경우 F는 조금 열?
그래서 같은 전달 해요 이전과 두 개의 인수.
난 여전히 새로운 노래를 사랑 그녀는 함께 나왔다.
하지만 세 번째로 통과하고있어 어떤 이 변수는 코드라고합니다.
>> 그러나 코드는 실제로 무엇인가 이 상황에서?
그것은 일반 C 변수처럼?
그것은 바로, 함수의?
그리고 그 때문에 조금 이상한 수 있습니다 사실은 지금 통과 같이 해요
또 다른 기능으로 작동합니다.
>> 이것에 대해주의해야 할 그래서 몇 가지.
하나, 사실은 전화 아니에요 코드 기능.
그래서 당신과 코드를 볼 수 없습니다 왼쪽 괄호, 오른쪽 괄호.
난 그냥 코드를 전달하고 있습니다.
그리고 C에서,이 사실은 무엇을 할 것 그 실제의 나에게 포인터를 제공한다
코드, 다음이 그것을 실행할 수 있습니다.
당신이있어하지만 단지 그것에 대해 생각 실행 코드를 전달하는 경우
해당 파일이 열립니다.
>> 그러나 이것이 의미하는 것은 이제 할 수있는 내 프로그램의 나머지
다른 물건은 다른 일을 계속할 수 있습니다 물건을 우리가 정말 기다릴 수 있지만 동시에
단지 우리의 머리의 뒤쪽에있다가 때 해당 파일의 오픈, 실행하는 것이
상단의 코드입니다.
그 의미가 있습니까?
>> 이제 Node.js 뒤에 아이디어는 즉 F와 DO 물건의 코드
일부는 매우 짧고 간단해야한다 정말하고 간단하지
집중적 매우 계산.
그것은 다른 파일을 열어야 할 수 있지만, 그것도 아주 빨리해야한다
그것은 또 다른 F를 할 말을해야하기 때문에 열고이 다른 코드를 호출합니다.
>> 그래서 그냥 완전히 명확 F이어야합니다 그를 열고 새 케이티 페리의 노래에게 수행
완료 MP3, 그 것 꽤 많은 즉시 반환.
그리고 우리는 단지 일을 계속 할 수 있습니다 다른 것들 때문에 이제 F 모든
공모는 기본적으로 알려된다 않습니다 기본 f 개방 코드는이 파일을 열
당신은이를 열고 완료되면 당신이 그것을 다시 얻을 때 파일이나,
그 코드를 실행합니다.
그러나 실제로 코드를 실행하지 않습니다.
그리고 당신은 질문을했다?
>> 청중 : 당신은 몇 가지를 암시하는 듯 계산 추가 시간
집중적 인 코드 종류의 휴식 [청취] 구동 시스템.
[들리지?
>> 케빈 슈 미드 : 그건 좋은 질문입니다.
그래서 실제로 방법의 예를 당신은 계산을 통합 할 수
조금 집중 코드입니다.
그래서 우리는 코드 예제에 도착하면, 그 하나를 끌어해야합니다.
즉, OK인가?
감사합니다.
>> 당신의 이름은 무엇입니까?
>> 청중 : 아론.
>> 케빈 슈 미드 : 아론은 매우를 제공합니다 좋은 점, 즉 내가이 있다면
일부 연산 집약적 인 코드 F 부분, 나머지와 함께 할 것들
내 프로그램을 실행할 수 없습니다 및 수신 할 수 모든 때까지 새 요청 또는 아무것도
그 물건이 완료됩니다.
그래서 일반적으로 노드의 코드를 쓰고 있어요 경우 내가 갈거야처럼 우리가 뭔가를하지 않으면
우리가 볼 때 나중에 제안하는 코드 예제, 나는했는지 확인해야
내 코드를 묶어하지 않습니다 이 이벤트 루프.
그 의미가 있습니까?
OK.
쿨.
>> 그래서 Node.js는이 프레임 워크를 제공하는 당신이 중심이 이벤트를 구축 할 수 있습니다
있는 서버.
그래서 비동기의 이러한 종류가 반면에, I / O 라이브러리를 비 차단
우리가했던 표준 C 라이브러리 , 작업 같은 경우 단지
우리가했습니다 같은 방법을 사용 F로 사용하고는 열리고
물건, 사람은 차단되어 있기 때문에 실제로 기다릴 필요가
열이 파일.
>> 하지만 Node.js는 당신에게 그것을 제공하고 기본적으로 구글의 V8에 넥타이
이유 인 자바 스크립트 엔진 크롬 처리에 너무 빨리 있음
자바 스크립트 때문에 이 V8 엔진이 있습니다.
그래서 그 사람들 중 하나와 같은 소리로 들리 겠지만 WWDC 개발자 컨퍼런스 것
그들은 단지의 무리를 던지 프로세서의 문자 번호 것들
이것은 정말 멋지다 말한다.
그러나 그들이 한 것이 멋지다 이 때문에 자바 스크립트 -
또는 어쩌면 당신은에 익숙하지 않은 경우 자바 스크립트를 아직 우리가 없었다 때문에
그것에 강의 -
하지만 자바는 해석이다 언어.
>> 그리고 이것은 너무 중요한 포인트입니다.
그래서 우리의 웹에 대한 중요 서버는 바로, 빨리해야 하는가?
그리고 우리는 단지 자바 스크립트에게 실행중인 경우 으로 해석 된 코드 단지
오래된 인터프리터는 속도가 느려질 수 있습니다.
이 데에서 그래서 노드 혜택 슈퍼 빠른 V8 인터프리터.
그들은 그것을 명명한다면 모르겠어요 때문에 이마의 V8 때리고
물건도 OK.
>> 그래서 몇 가지 예제를 준비했습니다 이 URL에서.
세미나 후, 나는 종류의에 갈거야 당신은 노드 세트를 얻을 수있는 방법에 대해 이야기
최대,하지만 지금은 그냥 일종의 할 몇 가지 코드 예제를 통해 걷는.
그래서 만약 당신이 함께 따라하려는 경우, 모든 소스 코드가 제공됩니다.
OK?
>> 그래서 나는이 URL을 떠날거야 약간의 최대.
그리고 난 단지에 갈거야 터미널로 전환합니다.
모두가이 URL로 좋은가요?
그래서 전환거야 여기 내 터미널.
>> 그래서 여기에 코드는 그 나는 오늘이 있습니다.
왜 우리가 시작하지 simpler.js는 파일?
다른 것은입니다이 모든 코드로 작성 될 것입니다
자바 스크립트를하는 당신은 수도 있고 에 익숙하지 않을 수 있습니다.
난 몇 가지 추측이 많이 자바 스크립트 코드의 종류는
문법과 구조는 매우 유사하다 C와 같은 당신의 종류를 선택할 수 있도록
당신을 따라 이동합니다.
나는 많이 쓰고 노력했습니다 의 방법이를위한 시작 코드
그것의 있도록 C와 유사 좀 더 읽기.
하지만 우리가 진행으로, 내가있을거야 추가의 일부를 시연
자바 스크립트의 기능이 종류의 근사합니다.
>> 그러나 이제이 예제 프로그램을 살펴 보자.
나는 모든이가 차단 같아요.
난 그냥 현실을 해결하기 위해 갈거야 그 확인 여부를 빠르게합니다.
나는이 할 무슨 일이 일어나고 있는지 알 수 없습니다.
조금 더 나은 것입니다?
당신은 VAR 및 물건을 볼 수 있습니까?
OK.
>> 그래서 첫 번째 줄은 자바 스크립트처럼 변수의 버전
선언.
그러니 어떤이는 것 강조 따라서이 단지처럼 C에서처럼
저 말 지수는 세에 해당 또는 그런 일.
그래서 유형을 지정하지 않았습니다.
자바 스크립트 형식을 가지고 있지만의 정보 매우 동적 성격에 입력, 그래서
그것에 형식의 모든 종류를 제공하지 않았다.
그래서 그냥 VAR 있습니다.
즉, 변수처럼.
OK?
>> 그리고이 변수 HTTP를 호출하고 있습니다.
그리고 내 오른쪽에, 나는에게이 내가 HTTP에 넣을 식입니다.
그리고 이것은 HTTP를 필요로 말한다.
그래서이 종류의 유사 포함하는 것입니다.
조금 더 같은 강력한 이상입니다 포함하는 의미에 포함
그냥 복사하고 헤더를 붙여 것 함수 프로토 타입을 신청하거나
타입 정의와 무엇이든.
그러나 필요 실제로 것입니다 우리에게 코드를 얻을 수 있습니다.
>> 그래서 당신은 생각할 수 코드를 가져 오기.
그래서 어딘가에 Node.js 모듈 시스템이든, 그들은 모든이가
HTTP 서버 코드 그래서 난 그냥 내 자신을 위해 그것을 가져 오는
이 프로그램에 개인적인 사용.
OK?
>> 그래서 나는이 기능이 내가 작성한있다.
내가 지정하지 않은 통지 반환 형식이나 유형
인수를 다시.
그래서 종류의 느슨한에 입력 감각의 종류.
이 수중에 두 개의 인수, 요청 및 응답.
그래서 개념의 종류처럼 우리가 가진 그림에서 잘
화면에 있기 때문에 이전 우리는이 요청을 얻을 우리
사용자로부터이 있습니다.
그리고 우리는 응답이 그 우리는 정보를 기록 할 수 있습니다.
>> 그래서 이것의 첫 번째 줄은 않습니다 (200) res.writeHead 다음이
콘텐츠 형식의 텍스트 일​​반.
그래서 조금이 떨어져 조각 할 수 있습니다.
그래서 그냥 res.write에 초점을 맞춰 보자 조금에 대한.
그래서 쓰기는, 기본적으로, 머리를 쓰기 종류의 작성하는 단지 방법입니다
응답보세요.
OK?
사람이 기억한다면, 머리를 쓰기 HTTP의 강의에서, 너희들을
에서 헤더를 기억 HTTP 것 위에?
왜 난 그냥 데모하지 않습니다 진짜 빨리 헤더.
그 도움이 될 것입니다?
아니면해야 우리 단지 종류의 -
OK.
확인합니다.
>> 그래서 브라우저가 google.com에 갈 때 또는 그런 식으로,
실제로 조금 더있어 -
이 비밀처럼 -
조금 더 많은 정보와 같은있다 그것은 단지보다 파이프를 통해 제공
작은 검색 및 모든.
그래서 당신이 보여, 내가 갈거야 컬라는 프로그램을 사용합니다.
OK?
그래서 이것은 당신이 실행할 수있는 일이있다 맥 OSX 명령 줄이나에
제품 또는 무엇이든.
그리고 내가 컬 경우 HTTP google.com, 나는 HTML을 볼거야.
그리고 이것은, 공평하게, 단지 정렬하는 방법을 설명 HTML
브라우저가없는 경우 WWW로 리디렉션 자동으로 처리
재.
>> 그래서 이것은 단지 HTML,하지만 난 갈거야 내가 플래그이 하이픈 컬에 추가.
OK?
그리고이 보여줄 것입니다 나 헤더.
그래서이 또한 제공 정보입니다 를 통해 나는이 응답을 얻을 때.
OK?
>> 그래서 상단에, 당신이 볼 HTTP 301 영구적으로 이동합니다.
그리고 중요한 일이 라서요 때문에 이 상태 코드를 의미한다.
그래서 여기 (301)는 상태 코드이다 기본적으로 그냥 정수입니다
즉, 브라우저 또는 누구의 지시 당신이 척하면,이 글을 읽고
당신은 브라우저이고이를보고있다, 기본적으로 지금은 보면
그와 당신이 (301)를 참조하십시오, 당신은 내가 가지고있는 알고 를 기반으로 뭔가 특별한 걸
(301), 또는 뭔가 특별한 일이 (301)을 기준으로.
그래서 영구적으로 이동 말한다.
>> 그리고, 기본적으로, 우리는이 키 값 쌍의 무리.
그래서 우리는 위치를 얻을 www.google.com입니다.
다음 종류의 모든 다른 것들, 그러나 기본적으로, 어떤 위치는
말은 새로운 위치 www.google.com에 있습니다.
당신은 google.com에 가면 그래서 지금, 당신은거야 종류의 깜박임의 브라우저 종류를 확인
리디렉션 다음 두 번째와 용 바로 다시 www.google.com에.
그래서 응답은 포함 할 수 있습니다 이러한 헤더.
>> 그리고 몇 가지를 지적합니다.
그럼 우리가 실제로 성공했다 가정 해 봅시다 웹 페이지를 방문한다.
그래서 나에 가자 -
좋은 웹 사이트는 무엇인가?
나는 좋은 생각에 나쁜 해요 그 자리에서 웹 사이트.
>> 청중 : 위키 백과.
>> 케빈 슈 미드 : OK.
의 위키 피 디아를하자.
그래서 나는 여기가 이동되었습니다.
아 기다립니다.
나는이 되었나요?
예,이었다.
OK.
그래서 나는 WWW을 할 수있어.
그래서 www를 할거야.
당신이 볼 수 있듯이, 여기에 모든 HTML이다 브라우저가 처리하는 것
위키 백과에 대한.
>> 하지만 여기에 스크롤 유지하는 경우, 나는 정상에 볼 수 있습니다 무엇을 -
와우,이 많이 있습니다 위키 백과에 HTML -
하지만 내가 여기에 상단에 볼 수있는 것은 에 대해서 반대이 200 상태 코드
앞서 본 301.
그리고 그것은 좋은 있음을 알 수 옆에 친절 OK.
그래서이 좋은 상태 코드와 같습니다.
>> 그 200 번호가 익숙합니까?
예 때문에 simpler.js를 한 때 나는 거기에 200을 썼다.
그래서 기본적으로 말 말 것 브라우저 나 누구가에 도착하려고
그들이 성공했음을이.
또는 같은 우리의 종류 너무 성공했다.
>> 그리고 특수 구문의 종류가있다 자바 스크립트의 선언에 대한
콘텐츠 형식 등이 키의지도 텍스트 일​​반 등이 값.
그래서 당신은 응답을 보면 우리 전에 다시 위키 백과있어 -
나는 스크롤하려고거야 조금 더 빨리 -
당신은 서버 등이 키가 이러한 값 아파치.
그래서 당신은 키와 값을 가지고있다.
그리고 당신은이를 지정할 수 있습니다 다시 보낼 것을 노드.
>> 그래서이 일부 사실의 종류입니다 방법으로, 어떤 방법으로이 아니다
실제로, 그러나 약간 낮은 레벨의 정보 당신이 할 수있는 PHP 코드를보다
P에 대해 작성하는 것은 일곱을 설정 때문에 PHP와 아파치는 종류의 일부를 돌봐
당신이 일을.
PHP에서는 기본값을 대체 할 수 있습니다 자신의 헤더를 작성하여 동작.
그러나 이것의 목적을 위해, 우리는 얻을 우리 자신의 헤더를 작성합니다.
>> 그래서 라인은 이해가 않습니다 모두, 기록 헤드 라인?
OK.
신난다.
>> 그럼 내가가는 응답을 종료합니다 세계의 인사로.
OK.
그러나 그것은 단지 함수의 요청 처리기했다.
그래서 지금은 실제로 종류의해야 이 기능이 뭔가, 오른쪽?
>> 그래서 여기에 내가하는 일이이입니다 VAR 서버 같음을 수행 라인
HTTP.create 서버, 다음 I 요청 처리기에 전달합니다.
따라서이 노드의 종류 서버를 만드는 방법입니다.
그리고 흘러가는 걸 알 요청 처리기에서.
그래서이 createServer을 말하고있다 난 당신이 내게하고 싶은 기능
서버 및 때 서버가 수신 응답, 당신이 호출 할 필요가
핸들러 함수를 요청합니다.
OK?
>> 그래서 라인 거의 바로 완료됩니다.
따라서 VAR 서버 라인은 오른쪽으로 수행됩니다 당신은 꽤 많이 그렇게 후.
내 말은, 그것은 몇 가지 내부를 설정하는 당신이해야한다는 것을 알 수있는 상태
그 요청 처리기 함수를 호출하지만, 그것은 거기에 앉아 예정 아니에요
말은 보낸 사용자가 나 아직 요청?
사용자는 아직 나에게 요청을 보낸 적이 있습니까?
그래서 차단하지 않습니다.
OK?
>> 그래서이가 할 것은이 기본적으로 지금이 코드에 대한 포인터가 저장,
다음 요청 핸들러 함수 및 이 코드를 실행할 때 누군가
요청합니다.
그리고 우리는 server.listen을한다.
>> 1337 꽤 임의있다.
나는 특별한 이유가 없습니다 그 번호를 따기위한.
그것은 완전히 무작위로했다.
그러나 그것은 단지 포트를 지정합니다.
그래서 대부분의 웹 서버는이 부분에 대해서는 그들이 그 종류이기 때문에 포트 80을 사용
의 규칙 등을들 수있다.
그래서 뭔가에 가면, 나도 몰라, Wikipedia.org,
내가 콜론 8을 넣어 -
오 와우, 당신은 볼 수 없습니다.
미안 해요.
하지만 위키 백과를 할 경우 -
난 여기가 쓸 것이다 그냥 그렇게 그것은 카메라에 분명하다.
하지만 내가 가진 브라우저에이 걸릴 경우 지정하는 콜론 (80)로 이동
Wikipedia.org 포트 80에서.
따라서 미국이 얼마나처럼 당신이 출하 할 수있는 등 여러 개의 포트
어떤 종류의 정보.
그래서이 특정 이동처럼 이 서버에 배치합니다.
OK.
>> 그래서 난 그냥 1337를 선택했다.
숫자의 전체 범위가있다 당신은 선택할 수있다.
즉, 완전히 특별하지 않았다.
>> 그러나 지금 할거야 나는 노드를 실행하는거야 있습니다.
내가 실제로 입력 할 수있는 몇 당신이 그것을 볼 수 있도록 아래로 라인.
나는 노드를 할거야, 그리고 난 simpler.js를 실행하는 것.
그리고 우리는 얻는 방법에 대해 이야기 할 것입니다 노드는 약간의 설정.
하지만 지금은 서버를 실행중인.
>> 그래서 한 가지 우리가 시도 할 수있는하지 않을 수 있습니다 흥미로운 우리가 실제로 할 수있는 것을 할 수
컬에 액세스하려고합니다.
그래서 컬을 수행 할 수 있습니다 내 기계는 로컬 호스트입니다.
또한이 기록이 표시됩니다 때로는이있다.
로컬 호스트와 127.0.0.1은 친절 당신의 집에있는 컴퓨터 등을들 수있다.
그래서 이야기처럼 자신의 컴퓨터.
OK.
>> 그리고 나서 1337 말할 수 있습니다.
그래서 나는이 코드 줄을 실행하는 경우, 그것은 세계 안부.
그리고 그 물건을보고 싶어하면 그 했다 콘텐츠 형식의 텍스트를 일반 또는
무엇이든, 난 여기를 둘 수 있었다.
그리고 확인을 말하는가 것을 알 수 있습니다.
그리고 텍스트 일​​반을하지 않아도됩니다.
그리고이 다른 종류의 모든있다 노드 그룹에 추가 할 것들
거기에 나를 위해.
즉, 슈퍼 중요하지 않습니다.
>> 내 말은, 기술의 몇 가지 종류가 있습니다 친절의 측면
다만 보여줄의 이야기 시원하지만, 당신은 또한 전원을 수있다
주위에 이러한 변경합니다.
그래서 난 그냥 무리를 추가 할 수 있습니다 그런 물건.
그리고 지금, 내가 보면 내 출력은, 그 것입니다.
그래서 이러한 헤더는 어떤 것들을 의미 같은 브라우저와 볼거리에.
>> 그리고 헤더는 기본적으로 브라우저를 말할 수있다 어떻게 무언가에 반응한다.
당신은,는 이전에 쿠키를 들어 본 적이 있다면 또는 당신은 짜증이왔다면
쿠키를 설정 웹 페이지에서, 또는 쿠키 블록 또는 켜져
그런 식으로.
실제로 쿠키를 설정할 수 있습니다 이러한 헤더.
그래서 그들은 방법을 브라우저에게 경우에 따라서는 동작.
OK.
>> 그래서 simpler.js했다.
아무도 질문이 있습니까 그 소스 코드 파일에?
OK.
쿨.
>> 그래서 그에서 R을 제거 할 수 및 simple.js 확인합니다.
따라서이 꽤 많이 있습니다 같은 프로그램.
나는 조금 다르게 쓴 내가 강조 정렬하고 싶었 기 때문에
자바 스크립트의 몇 가지 기능을 제공합니다.
>> 그래서 주목 그 의뢰처 기능은 완전히 사라졌다.
네 오, 당신은 질문이있는 거죠?
>> 청중 : 네, 인수 그에 전달되는
기능, 그들은 무엇입니까?
>> 케빈 슈 미드 : 그래서 사람들은 자바 스크립트 객체.
Node.js 문서에서는, 기본적으로 방법이 무엇인지 말한다
그들에 사용할 수 있습니다.
우리는 단지에 대한 액세스를 가지고하는 일이 쓰기 헤드와 끝이라는 방법
그와 같은 것들.
그러나 전체 무리가있다 더 많은 방법.
>> 예를 들면, 그 중 하나처럼 촬영에 특히, 당신은 할 수 있습니다
rec.method 같은 것을하는 것 그것은 HTTP 얻을의 여부를 말해
HTTP POST 요청 및 그런 것.
그래서 다른 모든 종류의가있다 속성,하지만 그들은 둘 다
자바 스크립트 객체, 그들은 단지이 그들에 부착 된 기능을 당신에게 그
정보를 기록 할 수 있습니다.
OK?
>> 그래서 요청 처리기를 통지 완전히 사라졌습니다.
하지만 요청했다 코드 핸들러는 아직 거기있다.
나는 아직도이 res.writeHead이 나는 여전히이 res.end있다.
그리고 이것은에서의 예 것입니다 자바 스크립트는이 아이디어
익명 함수.
익명는 피팅 이름처럼 그것을 위해 말 그대로하지 않기 때문에
이름이.
어떤 기능 요청이 없다 거기 핸들러.
>> 이름이없는,하지만 여전히 인수를하고있다.
그래서 난 아직도 녹화 및 고해상도 얻었다.
그리고 난 여전히 코드가 있습니다.
이것은 완벽하게 괜찮습니다 자바 스크립트 코드입니다.
그래서하지 않고 함수를 선언 할 수 있습니다 명시 적 이름을 제공.
처음에는 약간 혼란이다.
일부 같은 유용한 것들이 있습니다 당신과 함께 할 수있는
이러한 익명 함수.
아무도 여기에 대한 질문이 있습니까, 또는 그것은 단지에 대한, 지금 OK입니다
종류의 단지 동의 그것이 같은 일을 할 것인가?
네?
>> 청중 : 함수는 첫 번째입니까 자바의 클래스?
>> 케빈 슈 미드 : 그들은 첫 번째입니다 자바의 클래스.
그냥 알고 이러한 개념 같은 익명 함수에 전달
이 자바 스크립트에 적용되는 당신 에 대한 최종 프로젝트에 쓸 수 있습니다
도 웹 브라우저.
그래서 예를 들어, 자바에있는 브라우저, 그것은 다소 또한 이벤트의
의미에서 구동이 무엇을거야 사용자가이를 클릭 할 때입니다이
버튼을, 당신이이 코드를 실행하려고합니다.
>> 그래서 아이디어의 동일한 종류의 클라이언트 쪽 마우스를 클릭하거나 할 때
에 대한 몇 가지 이미지 위에 마우스 당신의 웹 페이지에이 코드를 실행합니다.
즉, 서버에 적용 할 수 있습니다.
그래서 종류의 흥미로운처럼 자바 스크립트는 정말 왜 이유
적합 또는 어떤 사람들은 생각 이런 종류의에 적합한 언어
이벤트 드라이버 서버 당신이 있기 때문에 이러한 익명 함수.
당신은 모든 생각의이 이 비동기 코드.
OK.
질문 있나?
>> OK.
그래서 simple.js했다.
그럼 한 번 더 살펴 보자 또는 몇 가지 더.
그래서이 sleep.js입니다.
그래서에 익숙한 사람입니다 C 함수 수면?
이전 강의 어쩌면 하나에서 또는 그런 식으로 뭔가?
>> 그래서 기본적으로 내 생각을 전달할 수 초 단위 또는 당신은 U에게 사용하는 경우
밀리 초 단위의 숫자를 잠 또는 나노초.
기본적으로 프로그램은 중단됩니다 시간의 금액에 대한 실행.
오른쪽?
그리고 결국 일어날 것이다 다음은 계속 실행됩니다
프로그램.
>> 그래서이 서버 종류의 제공 자기의 느낌.
그래서 우리가 동일한 것을 알 헤더 등으로 200 res.writeHead
전에,하지만 우리는이 전화하는거야 함수는 타임 아웃 시간이라고.
설정 시간 초과도 가능합니다 웹 브라우저 구글 크롬
또는 사파리 또는 무엇이든.
그리고 기본적으로 여기에서 무엇을하고 있는지 그것은 함수에 복용한다.
공지 사항, 다시, 그것은이다 익명 함수.
우리가이기 때문에 그래서 종류의 멋진 내 익명 함수를 사용하여
익명 함수하는 조금 이상 할 수 있습니다.
>> 그러나, 이는 그 기능을 복용 이 방법과 - 기본적으로 말
작품은 내가 원하는, 5,000 밀리 초 단위입니다 해당 기능을 실행하는
그냥 어이 응답은 종료하고 기록합니다.
따라서이 같은 인상을 준다 자, 그러나 방법이 실제로
작품은 우리를 통해 실행합니다입니다 매우 신속하게이 라인.
우리는 뭔가를 쓰고있어.
그리고 우리는 또한을 통해 실행할 수 있습니다 매우 신속하게이 라인.
그래서 우리는 실제로는하지 않을거야 5 초 동안 기다립니다.
우리는 단지 실행하는거야 즉시이 코드.
>> 그리고, 다시이 작은있다 지금이 일이 이벤트 루프
기본적으로 그냥입니다 레지스터 지속적으로 원형으로 돌고
그리고 하나의 시계를 찾고 실 말은, 5 초이
아직 통과?
그리고, 그것은 볼 때 그 두 번째 손으로 5 초 또는처럼 이동했다
무엇이든, 그것은, 일어나고 말한다 아, 무엇을해야합니까?
오, 나는이 코드를 실행해야합니다.
그리고, 그것은 것 헤이 res.end 실행합니다.
>> 그래서 다시, 우리는 여기에서 기다리는 경우는 없습니다.
그래서 아니라 그 내부 코드 이 기능은 다섯 걸릴 것입니다
실행 시간 (초).
이 코드는 거의 실행 에 순간적으로, 적어도 상대
우리가 얘기했다 오초 에 대한 이전하기 전에.
>> 그러니, 행동이 보여 나는 Node.sleep.js 할 수 있습니다.
그리고 무언가를 I의 혼란을 했습니까?
아마도.
미안 해요.
이제 우리는이 문제를 해결하기 위해 무엇을 할 수 있는지 살펴 보자.
OK.
그래서 확실히 Node.js.를 사용
난 그냥 농담이야.
OK.
한 초.
OK.
나는 그것이 무엇인지 알고있다.
>> 그래서 문제는 그 내 다른 탭의 여기에, 나는 이미 노드를 실행중인
같은 주소 1337.
우리가 보면이, 던져 그래서 오류 그것을 실제 밀접 주소에
, EADDRINUSE를 사용합니다.
그래서 난 이미 여기에 1337을 사용 하였다.
나는 지금 다음이를 차단하고,이 경우 희망을 갖고, 모든이를 실행하려고
잘 될 것입니다.
OK.
그래서 당신은 단 한 가지의 종류가 있습니다 의 번 포트에서 수신.
또 다른 해결책은 날이었을 것입니다 그냥 프로그램을 편집하고 만들려면
그것은 1338 또는 뭔가처럼 그런.
>> 하지만 지금 잠이 실행 중입니다.
그래서 실제로 그것을 시도하자 브라우저이 시간이 때문에
볼 수있는 약간의 수익률이 그것은 터미널에서.
그래서 난 그냥에 갈거야 127 주소 다시 1337에서.
그리고 경우에 당신은 그것을 볼 수 있습니다 -
난 당신이 할 수있는 경우에 몰라요 -하지만 내 브라우저는 아주, 아주 오래 복용
또는 오초와 같이 적재하기.
>> 그리고 그 후, 그것을 마지막으로 응답을했다.
그리고 당신은 그것을 볼 수 없기 때문에 일 내가 할 경우 약간 위로 이동되지만,
이 조금 작은, 당신 그것은 헤이 말한다 볼 수 있습니다.
그래서 안녕을 가지고 있지만, 오초 후.
그리고 볼 조금 청소기 수 있습니다 여기에 터미널에 그것을, 그래서 난
할 거 -
여기서의하자 -
의는 해당 주소 컬하자 다시 1337로.
그리고 어쩌다 앉아 있어야 여기에 5 초.
그러나 알이 서버 새로운 응답을 받아 들일 수 있습니다.
그래서 헤이 인쇄합니다.
>> 기본적으로,이 데모하는 것을 나는이 다른 탭에서 할 수있는 -
그래서 내가 다른 탭에서 이렇게 말을하자, 나는 컬과 같은 행동을 할거야
일 다시.
그리고 나는이 킥을 시도하려고 해요 동시에 사람 끕니다.
그래서이 작업을 수행하는거야, 그리고 난 여기에 경주에 가서 난
다시 할 것.
>> 그리고 현실을 만들어 보자 있도록 둘 다 볼 수 있습니다.
헤이 인쇄 그 하나 하나 인쇄 헤이 모든 방법에서 -
이제 다시 실험을 해 보자.
사실, 이제이를 사용하자 그 확인의 경우, 트릭.
>> 그래서 쉘 것을 사용된다는 말 내가 기본적으로 두 복사본을 실행할 수 있습니다
병렬 프로그램의.
그래서 첫 번째 프로그램을 실행하고 있습니다 병렬 번째 프로그램.
I Enter 키를 누를 경우에 따라서 지금은 무슨 그 요청이 꽤 많이 만들려면
순간적으로 동시에.
그래서이에게 기회를 제공 할 수 있습니다.
>> 그래서 지금은 두 가지 과정을 말한다 알 수 있습니다.
그리고 당신은 호기심이 있다면, 그 27,000 번호는 기본적으로 프로세스 ID이다.
그리고 그들은 인쇄, 알 헤이 동시에.
우리가 다섯 기다려야했다 싫어했다 그 후 한 다음 초,
오초 이후 두 번째를 얻을.
그래서 종류의, 어떤 방법으로, 그건 것 정말 증거가 있지만 안
그냥 아니라고 직관적 인 증거 5 초 기다리고 차단 등
전체 스레드.
멋진 OK.
>> 아론은 이전과 같은 질문을 그 했다, 물론 우리가 뭔가를 할 경우 -
네?
>> 청중 : 잠깐.
어떻게 다르다 printf의 버퍼,하지만?
자동으로 그렇게하지 ​​않는 이유는 무엇입니까?
왜 우리는 그것에 대해 걱정해야합니까?
>> 케빈 슈 미드 : 오, 당신이 할 수 하나 더 말?
>> 청중 : printf의 버퍼를 좋아하지 않는다 똑같은 일을?
>> 케빈 슈 미드 : printf의 버퍼?
>> 청중 : 네.
OK.
그들은 자기들 퀴즈 중 하나에 없었다 어떻게하면 바로 printf의 이야기
뭔가 다음 하나를 일시 중지했다 두 번째, 그리고 당신은 그것을 루프 열이
시간, 그것은 10 초를 기다린 것이다 다음 모든 것을 함께 printf를?
>> 케빈 슈 미드 : OK, 오.
>> 청중 : 동일한을하고있다 일 다음이 경우?
>> 케빈 슈 미드 : 그래서 질문은 기본적으로 이전의 퀴즈 중 하나
또는 뭔가 문제가 있다는 것을 기본적으로 인쇄 F (10)에게 말한다면
다음 번에 ​​물건과에서 같이 잤다 이들를 출력하는 과정,
어떤 이유로 끝에, 그것은 것 단지 화면의 모든 밖으로 사람들을 덤프.
따라서 서로 다른 두 가지의 종류가있다 여기 개념.
>> 그래서 한 가지가 해당이있는 것 같다 경우, 우리는 서로 다른 두 가지를 다루고
종류의 사람들이 서버에 요청 동시에 것들에 대한.
그리고 printf의 종류의 이유 그렇게 대기하고 모두 밖으로 덤프
한 번에 더 많은 관련이 얼마나 printf의 종류 -
그래서 방식의 printf는 실제로 구현은 기본적으로 제공합니다
쓸 운영체제 이야기 콘솔에 그 물건.
그래서 모든 걸하고 싶지 않습니다 당신이 printf의 말을 물건을 즉시
일부 문자열 그 수 있기 때문에 그것은에있는 경우 비싸
때마다 그렇게.
>> 당신이 있다면, 헤이 프로그램을 printf를 실제로 인쇄 할 수 있습니다
바로 콘솔.
그것은 확인을, 내가 쓴 말을 수 있습니다.
당신이 제공하는 다음 종류의 대기 그것은 실제로 전에 좀 더
콘솔에 쓰는.
>> 그래서 그런 경우가 된 이유 -
그것은 종류의 무관의 잠 -
수면 종류의 단지라고합니다 설명하기가 주입
이 기록하지 않는 사실 그것은 기적.
그러나 그 이유는 저스트 성능에 당신이 할 수 있도록
많은 접점을 만들지 운영 체제.
>> 그러나 여기에서, 우리는 무엇을 정말하고 노력하고 이 수면 것으로 그냥 쇼입니다
우리는 방문 두 사람이있을 때 이 웹 사이트는 넣어 않을거야
그 해 말 것 라인 내가있을 때 당신을 돕고,해야
완전히이 후에 당신을 돕는 완료 5 초 후, 나는에 갈거야
다음 사람에 이동합니다.
그래서 첫 번째 사람의 요청은하지 않습니다 해당 이벤트 루프를 묶어
그 의미가합니다.
>> 그러나 여기 실제로 예입니다 넥타이 무언가의
이벤트 루프입니다.
그래서 여기에 무서운 함수입니다 n 번째 피보나치을 계산한다.
그것은 말 그대로 당신이 할 수있는 최악의 방법 n 번째 피보나치 수를 계산합니다.
그리고 이것은 단지 인정하는 사​​실입니다 이것은 어디에서 왔고,
실제로 있습니다 -
내 말은, 당신은 그것을 찾아 갈 것을 시도 할 수있다 - 그러나 매우 긴 블로그있다
누군가가 쓴 게시합니다.
그것은 그 레딧 중 하나 같아요.
그러나 누군가는 Node.js를 비판하고, 이들은 예를 들어 이것을 사용했다.
그래서 나는 종류의 당신에게 두 가지를 보여주고 싶었 다른 관점 그냥 얻을 수
개념의 일반적인 이해 이 두 가지의 뒤에.
>> 그러나 이것은 단지 끔찍한로 선택 끔찍하게 비효율적 인 계산
계산하기위한 집중적 인 방법 n 번째 피보나치 수.
그러니 그냥 보조 노트로, 왜 그것은 끔찍한 하나의 방법처럼?
네?
>> 청중 : 시작 말 1000과 중.
999 및 998에 1,000 분할.
이 각각은 두 가지로 나눕니다.
>> 케빈 슈 미드 : 오른쪽.
>> 대상 : 모든 방법을 아래로.
>> 케빈 슈 미드 : 그렇지.
경우에 따라서 그냥 카메라에 반복 I 1,000 무엇인가에 거짓말을 했어 전화
그런 식으로, 그것은 분명 미만 아니다 또는 동등의는 그래서 난에 갈거야
이 다른 케이스로 이동 한 다음 나는거야 999 거짓말을 했어 플러스 998 거짓말을 했어 호출합니다.
그리고 거의 모든 것을의 999가하는 거짓말을 했어 작품입니다
종류의이 수준.
당신이 아래로 이동하면 더 많은 중복의 보다, 그러나 만약 당신이 단지
컴퓨팅 FIB 998 얻을 생각 우리는 아주 가까이 999 거짓말을 했어합니다.
그래서 우리는 정말 좀 더해야 우리는 종류의 재사용 방법에 대한 영리한
이 있지만, 우리는 다시하지 않을 모두에서 이러한 일들.
그래서 당신은이 거대한 상상할 수 비극의 거대한 나무.
>> 어쨌든, OK.
그래서 악의없는 거짓말이었다.
그냥 실행하는 데 시간이 걸립니다.
네?
>> 청중 : [청취].
>> 케빈 슈 미드 : 오, 당신이 할 수 질문을 반복?
>> 청중 : [청취].
>> 케빈 슈 미드 : 아 그래서 이것은 단지 코드 그 종류의에있을거야
서버 측.
그래서이 발견하지 않을 브라우저 또는 아무것도에.
그것은 우리가이 것은 기본적으로인지 할 때 여기에 사용자가 꽤 많이 만든다
다시 자신의 요청을 할 때 우리는 종류의 요청을, 우리는 전화를 겁니다
서버 측에서이 기능을 사용하지 않음.
그리고 우리는 그 결과를 다시 얻을 것이다 이 함수를 호출.
그리고 우리는 단지 인쇄 해드립니다 사용자에게.
따라서 사용자는 실제로 거래를하지 않습니다 너무 많은이 함수.
>> 질문이 있었습니까?
그 의미가 있습니까?
OK.
쿨.
>> 그래서 다시, 우리는이 모든 res.writeHead을 우리는 인쇄 일
헤더.
그리고 제가 수행하여 반응을 종료 매직 넘버는 FIB 45입니다.
그래서 그냥이 서버를 실행하자.
그래서 노드 fib.js.을 할거야
그래서 지금 내 악의없는 거짓말 서버가 실행 중입니다.
>> 그리고 여기, 내가 갈거야 다음 중 하나를 수행합니다.
OK?
그래서 난 그냥, 컬을 말하는거야.
그래서 시간이 좀 걸릴 것 만있어 희망이 곧 마무리 할 것이다
그것은 그 45를 인쇄한다 수를 피보나치.
>> 청중 : [청취].
>> 케빈 슈미트 : 그것은해야 곧 끝낼.
그래서 5~6초를 취해야한다.
그 단지 V8되는 슈퍼 알고하지 않습니다 빠르고, 그러나 어떤 경우에, 이것은이다
의도적으로 매우 짧은 예와 비 사소한의 우아
계산.
그래서 잠시 후,이를 얻을 않습니다.
>> 하지만 지금은, 내가 무엇을 할 경우 같은 종류의 내가 할 곳을 이전과 실험
동시에,이 요청?
그래서 나는 여기에 컬에 갈거야 그 주소, 나는거야
다른 컬을 할 수 있습니다.
그리고 우리는이 작업을했을 때, 기억 우리는 기본적으로이있을 때, 서버를 잠
오초 후, 그들은 꽤 많은 양이 바로 돌아왔다
같은시​​기.
그래서 특히 묶여되지 않았습니다.
>> 하지만 그건 지금 그것을 시도 할 수 있습니다.
OK, 그래서 우리는 우리의 두 가지 프로세스를 얻었다.
사람들은 프로세스 ID입니다 기억하십시오.
이 좀 될 것입니다 우리가 실속 동안 어색.
그래서 그냥 여기에 머물 수 있도록 기다립니다.
>> 그래서 그들 중 하나가 와야한다 다시 같은 후 -
좋아, 그럼 하나는 돌아왔다.
그런데 왜 두 번째는하지 않았다 하나는 아직 돌아 오지?
네?
>> 대상 : 서버가 아무것도 할 수 없습니다 그것은 그 큰 수를 계산하는 동안에.
>> 케빈 슈 미드 : 오른쪽.
그래서 응답했다 그냥 서버 정말 아무것도 할 수 없습니다 동안
그것은 그 피보나치 수를 계산하는 것.
그래서 지금은 그냥 내 두 가지를 얻었다.
하지만 난 그냥 코드에 대해 생각하는 것 같아요 좀 더, 어떻게 작동하고
모든 것을.
>> 그래서 여기에이 함수는 부호로서 나는 때 실행이 서버를 말 했어요
새 들어오는 요청을받습니다.
그래서 그냥이를 통해 실행할 것 전체 코드, 후 갈 것
이벤트 루프에 백업 한 다음 계속 새로운 이벤트를 검사합니다.
그러니까 기본적으로 우리가 일어나는 것을 서버입니다
새로운 정보를 듣고.
첫 번째 사람은 45이 무엇인지를 요청합니다.
우리는 그것을 계산하기 위해이 코드를 실행합니다.
이 코드는 소요 대략 다섯 실행 여섯 초.
그 다음 우리는 이벤트 루프로 돌아갑니다 새로운 요청을 확인합니다.
>> 그래서이는 경우, 방법의 예입니다 소위 계산 것들을 가지고
결합, 또는 계산을 많이 사용, 하지 파워,하지만 같은은
연산 집약적 -
나는 이것에 대해 말을 한 가지 추측 이 기능을 완전히하고 있다고
대부분의 경우, 꽤 유용한 작업 오른쪽.
전체 시간이 그 콜백 기능이 실행, 그것은 꽤 있었다
많은 대부분의 시간을 보내고 단지 컴퓨팅 n 번째 피보나치 수.
>> 그러나 우리는 하나의 스레드를했다 처리한다.
아파치 모델에서 때 이명 , 45 거짓말을 했어 얻을 수있는 요청을 만든 우리
두 개의 서로 다른 스레드를했을 것이다.
그리고 운영체제의 작업 사용자 레벨이되어, 또는했을
스레드를 관리하는 코드는했습니다 것 에 그를 슬라이스하고
CPU, 또는 여러 개의 CPU를했다하더라도, CPU에 걸쳐 균등하게 분배
그들은 모두 마무리했다 있도록 대략 동시에.
>> 그래서 우리가 정렬 할 수있는 방법을 보여 - 이것은 총 완벽하지 않습니다
솔루션,하지만 종류의 방법을 우리가 할 수있는 하게 다시 여기 와서 할
조금 더.
그래서 내가 여기있는 것은이라고하는 프로그램입니다 FIB C. 그리고 이것은 기본적으로 사용
호출 노드의 모듈의 또 다른 하나의 자식 프로세스 모듈.
그래서 포함 시켰 그 위에 종류의 포함 나는 파운드를 할 것의 같은
아이 process.h 또는 뭔가.
지금은이 CP 변수에 액세스 할 수 하는 내 모든 기능이 있습니다.
>> 그래서 지금은이 응답에 뭘하는지 핸들러는 내가이 프로그램을 실행 해요입니다
점은 FIB (45)를 슬래시.
그래서 내가 무슨 짓을 한 - 난 그냥 갈거야 이 프로그램 중 단계
조금 -
나는 C 프로그램을 작성했습니다된다 기본적으로 계산
n 번째 피보나치 수.
그래서 여기에 내가 쓴 단지 프로그램의 C에 해당이를 계산합니다.
나는 그것을 컴파일 할 수있다, 나는 실행할 수 있습니다 그것은 명령 줄에서.
그리고 계산하는거야 45 번째 피보나치 수.
>> 그래서 그냥 소요 통지 만큼 꽤 많이.
아마 대시 03을 사용할 수도 그것은 나처럼 뭔가를 최적화
하지만 난 그냥 평범한 좋아했다 컴파일러 설정.
그리고 그것을 출력합니다.
>> 그러나 지금, 나는 종류의 무엇을하는거야?
죄송합니다 아, 잘못된 파일.
그래서와 같은 물건을 이전 헤더.
그럼이 cp.exec을한다.
그래서이 할 것입니다 것은 그것이 전부이다 이 프로그램을 실행하는 것.
하지만이 작동하는 방법입니다 그것은 기다릴 않을거야
완료하는 프로그램입니다.
그냥 기본적으로 말한다 이 프로그램을 실행합니다.
그래서 기본적으로이 입력 신속한 종류를 명령.
>> 그리고, 당신은이 끝나면 그것은,이 기능을 실행합니다.
그래서 지금 우리는 종류의이 얻을 의 전체 복원 일
처럼 우리는 기다리고 아닙니다.
그런 종류의 이해가됩니까?
네?
>> 청중 : [들리지?
>> 케빈 슈 미드 : 그래서이 것 실제로 그것을 할 수있는 새로운 프로세스를 엽니 다.
그래서 이것은 몇 가지 방법으로, 실제로, 악 슈퍼 악하지 만입니다
중요한이 종류의 것을 대답 한편, 뒤로가는, 아파치
우리는 스레드와 프로세스를 수행 모델 각 요청 또는 용
각 요청에 대한 처리합니다.
그래서이 유사한 종류입니다 아파치가 수행한다.
어떤 경우에, 단지 새로운 사용 좀 더 가볍고 실,
과정보다 무게하지만 아파치는 할 수 새 프로세스를 포크 (fork) 끝
우리는 여기에서 어떤 종류의 인 암시 적으로 점 슬래시 FIB (45)을 수행하여.
>> 그리고이 경우에, 우리는 종류의 발생 프로세스의 동일한 비용.
그래서 이것은 당신이 할 수있는 한 것입니다.
그러나 다만 실행 이런 종류의를 표시합니다.
그리고이 이야기는 정말 목표로 같은 프로그램의 이러한 종류의 제시
다른 관점에 표시하는 방법 어떻게 그런 서버를 설계하는 방법.
내가한다면이 이제 다음 실행하고, 이것은 다시, 나는 두 개의 프로세스 ID를 얻었다.
>> 그냥에 대해 얘기하자 가지 지적합니다.
그래서 그들은 점진적으로 걸 알 수 있습니다.
멋있다.
그것은 전에 27,122 이었기 때문에.
그러나주의 사항 지금, 그들이 돌아왔다 대략 동시에.
>> 그리고 지금, 좋은 질문에 대해 문의합니다 왜 케이스는, 그의 일이라고했다
그것은 종류의 이러한 일들을 지금했다 종류의 각각 페어 플레이
다른 두 인스턴스 내가 달릴 점 슬래시 FIB 45
또는 그 노드 실행 된?
종류의 공평 것을 만드는 사람 둘 종류의 실행 시간을 균형 얻을?
>> 청중 : [청취].
>> 케빈 슈 미드 : 그래.
그러니까 기본적으로, 나는 점 슬래시 사소한 거짓말을 할 때 45 또는 그런 식으로 뭔가, 지금은의
가지 운영 체제 최대 해당 프로그램의 실행을 처리 할 수​​ 있습니다.
그리고 지금은 그들을 예약 할 수 있습니다 다른 CPU 나에
을 예약 할 수 있습니다.
그것은 하나에게 시간을 슬라이스 할 수 CPU는 그들이 얻을를 가져 오거나
하나의 CPU에서 실행합니다.
그래서 그 뒤에 생각이다.
그 모두에게 의미가 있습니까?
이제 노드 정말 재생되지 않는다 이러한 작업을 분할에 참여.
OK.
>> 그래서 거의 예제입니다.
나는 단지 한 가지 더 보여주고 싶었다 이 많이 원경되었으므로
완전히 최고 실제하지 일부 경우.
나는이 후 집 앞으로 상상할 수있는 이야기하고 뭔가 같은 말,
잘 나는 종류의 이야기에서 나왔다 그 나는에 대한 피보나치 서버를 만들 수 있습니다
내 마지막 프로젝트.
그래서 여기에 단지 종류의 또 하나의 예입니다 그 희망이 될 것입니다 -
아마,하지만 어쩌면 - 좀 더 종류의 최종 프로젝트에 적합하고
그런 것들에 대해 미리 생각.
>> 그래서이 chat.js.입니다
그래서이 종류의 몇 가지 샘플을 좋아한다 당신이 사용할 수있는 서버 측 코드
작은 채팅 서버 등을 설정 당신은 볼 수도
페이스 북은 채팅 또는 무엇이든.
그래서 나는이 페이스 북처럼 말하는 게 아니에요 채팅, 그러나 이것은 종류입니다
어쩌면 어쩌면 좋지 않다,하지만 - 좋은처럼 좋은 - 채팅의 출발점
당신의 웹 사이트를위한 서버 최종 프로젝트.
그럼 무엇을하는지 살펴 보자.
>> 그래서 우리는이 특별한 일이 있어요 상단에,이 SIO를 var에
Socket.IO를 필요로 같습니다.
그래서이 그렇지 않은 다른 것입니다 실제로와 함께 번들로 제공
노드하지만 당신은 그것을 설치할 수 있습니다.
이는 기지국 모듈.
그래서 그냥처럼 노드로 확장.
>> SocketIO 정말 실제로 차가운 종류.
그것은 기본적으로 어떤 추상화의 그것은 할 때, 당신을 허용합니다 않습니다
통신이 스트림이 웹 사이
브라우저와 웹 서버.
그래서 지금까지 대부분의 경우, 우리는 했어 이러한 매우 빠른 일초 또는 두 개의
웹 사이의 제 2 통신 브라우저와 웹 서버.
그래서 기본적으로 google.com, GET으로 이동 것 물건, 다음을 다시 보내
우리는 끝났어.
우리는 때까지 다시 이야기되는 일은 없습니다 사용자 유형 다른 뭔가.
>> 그러나 Socket.IO와 유사한 종류의 일 -와 SocketIO 실제로는 하나입니다
로 내장되어있는 것들 중 웹 소켓 어떤 종류의 수 있습니다
HTML5의 일부 -
그것은 당신이해야 할 수 있습니다 계속 대화.
그리고이 채팅 서버에 매우 유용합니다 일 종류가 있기 때문에
종류에 지속적인 대화와 같은 어떤면 때문에 당신이 채팅을하는 경우
누군가와 함께, 당신은 지금 그냥 보낼 수 있습니다 다음 파이프 다운 메시지 및
서버는 아래로 메시지를 보낼 수있다 당신이있어 다른 사람에게 관
와 채팅.
그리고 당신이있을 수 있습니다 그런 교환.
>> 그래서 어떤 종류의 SocketIO이 좋다.
SocketIO가 WebSocket을를 사용하는 이유 한 가지가 같이한다는 점에서
그냥 평범한 오래된 WebSocket을뿐만 아니라, 또한 기본적으로 몇 가지 트릭을 수행
그것은 브라우저 호환합니다.
인터넷 익스플로러 같은 브라우저 불행하게도 WebSocket을 지원하지 않습니다
오른쪽 밖으로 상자의.
그래서 멋진 스트레이트의 다른 종류를 사용 수 있도록 어도비 플래시와 일
당신은 크로스 브라우저 지원을해야합니다.
그래서 정말 유용합니다.
>> 그리고 실제로, 나는 종류의 거 알 여기에 시간에 실행하지만, CS50
토론, 당신은 뭔가를 보았다 처럼, 나도 몰라, 공백 운운입니다
이 게시물 또는 무언가에 회신 그런 그 기능?
즉 SocketIO입니다.
그래서 누군가에 입력을 시작할 때 응답 또는 확인 상자를 논의
어떤 브라​​우저가 무엇 않습니다 SocketIO 불리는 일종의을 방출
누군가의 말했습니다 이벤트 이 게시물에 회신.
>> 그런 다음 서버는 OK, 말한다 무엇을해야합니까?
물론 지금은 그 다른 사람에게 얘기를 해 사람 CS50 있습니다 찾고 토론
이 게시물에 누군가가 회신 있다고.
그래서 SocketIO가 무엇 종류의 이 계속 종류의, 좋은
대화의 흐름.
OK.
>> 그래서 여기에 무엇을 - 그리고 우리는 그저 연결 배열을 무시하는 것
조금을위한 -
내가가는 또 다른 경청하고있다.
그래서 그냥 Socket.IO의 방법입니다의 의이 포트에서 수신 할 말.
그리고 제가 연결에 대해이 작업을 수행합니다.
그래서 그냥 기본적으로 소켓 IO의의 우리가받을 때, 말하는 방법
연결, 나는 당신에게 원하는 이 코드를 실행합니다.
>> 대신 촬영을 갖는 것을 알 수 거기에 전달 입술 나는 소켓이 있습니다.
이 소켓의 생각은 기본적입니다 당신이 쓰고 읽을 수있는 것은
그 중에서 사용자가 아마도 메시지.
그리고 당신이 보낼 것 메시지 그 소켓을 통해 갈 수 있습니다.
그 의미가 있습니까?
그래서이 계속 일입니다.
>> 그래서 내가가는 Socket.emit를 ​​호출합니다.
그리고 발광 꽤 걸립니다 많은 두 개의 인수.
첫 번째 인수는 문자열 단지 분류를 나타내는
당신이 발광하는 것.
따라서이 경우에, 사용을했습니다 이 문자열 새 메시지.
그리고 그것은 단지 기본적으로 말하는 것 그 제가 어떻게이 일의 종류,
보내는 새로운 메시지입니다.
그래서 당신은 특정 유형의 수신 할 수 있습니다 새 메시지 또는 무엇이든 같이
점에서보실 수 있습니다.
>> 그래서 연결 및 사용자는, 거기 전송 당신은, 우리가 점에 전화를 어디를 봐야
그 대표 다른 문자열입니다 사용자 메시지의 유형.
그래서이 발광을 할 수 있습니다 기본적으로의 이러한 메시지 타입들 중 하나, 그리고
다음에 대한 응답으로 작업을 수행 이러한 메시지 타입 중 하나
>> 그래서 나는이 새로운 메시지를 방출하고 있습니다.
우리는 connections.push을 무시하는거야 초.
하지만 그때 Socket.on 사용자가 보낸 말한다.
그래서 지금은 좀 좋아하는 것 때 사용자가 나에게 메시지를 전송, 내가 원하는
이 코드를 실행합니다.
그리고 알이 익명 함수 이 변수에 복용
기본적으로 진행되는 데이터라고 사용자의 메시지를합니다.
>> 에 대한 이야기​​ 그래서 지금하자 종류 연결 배열입니다.
그래서이는 채팅 클라이언트를 위해 설계 기본적으로 모든 사람이있는 종류의 어디
같은 대화방.
그러니까 기본적으로, 우리는 계속해야합니다 주위에 약간의 배열은 그 기본적
에서 채팅 모든 사람을 나타냅니다 몇 가지 방법, 즉 의미가 있다면.
오른쪽?
우리는 누가 그 사람을 알 필요가 있기 때문에 그래서 우리는 그들에게 메시지를 보낼 수 있습니다
다른 사람들이 우리에게 보내주십시오.
>> 그래서이 코드가 수행하는 경우 사용자입니다 메시지를 보냅니다 - 그 유형의
이벤트 -
우리는이 코드를 실행하는 것입니다.
그리고 우리가 할 것은 우리는이를 통해 실행합니다 우리는 연결을 호출 한 배열입니다.
모든 연결에 대해 꽤 많은 우리의 하나를 제외하고, 그건
이 코드는 말씀을, 우리는 새로운 보내 이 첨부 된 메시지와 메시지
정보.
>> 여기에서 알 수 있다면, 나는 무엇을했을 때 사용자는 실제로 새를 만든다
연결 내가 함께 추가 한 것입니다 JavaScript.push 방법, 여기는
기본적으로 그냥 같은 추가 말 에 값으로 해당 소켓
우리의 연결 배열입니다.
이 코드를 실행하면 이제, 그것은 것입니다 그 특정 정보를 보내
연결.
그래서 이것은 좋은 출발점이 될 수 있습니다 채팅 서버를 만들기위한
또는 이와 유사한.
>> 멋진 물건의 종류입니다 만약에 같은 여기를 참조 및 코드
방출과 같은 물건은 동일합니다 자바 스크립트 코드의 일종 당신이 것
상호 작용하는 브라우저에 쓰기 서버와.
SocketIO 종류의 이유는 그래서입니다 단정하고 그 방법으로 유용합니다.
>> 아, 그리고 한 가지 더 진짜 빨리.
CS50 최종 프로젝트는 작년에 거기 있었다 즉, 기본적으로 채팅을 구현
Node.js.에있는 서버
나는 Harvardchats.org 생각 하지만 난 아니에요 -
OK.
나는 URL이 무엇인지 잘 모르겠지만, 그 후 그를 보낼 수 있습니다.
그러나 종류의 냉각 무슨 당신은 Node.js.로 할 수있는
>> 그래서 일반적으로, 너희들이 희망 Node.js 유용 무슨 좋은 의미
및 방법 당신은 아마 적용 할 수 최종 프로젝트.
좀 더 발송됩니다 이와 함께 자원.
와 주셔서 감사합니다.
감사합니다.
>> [박수]