문제

나는 무엇을 완전히 이해하지 못합니다 Node.js 모든 것입니다.아마도 제가 주로 웹 기반 비즈니스 애플리케이션 개발자이기 때문일 것입니다.그것은 무엇이며 그것의 용도는 무엇입니까?

지금까지 내가 이해한 바는 다음과 같습니다.

  1. 프로그래밍 모델은 이벤트 중심적이며 특히 처리 방식이 그렇습니다. 입출력.
  2. 그것은 사용한다 자바스크립트 그리고 파서는 V8.
  3. 동시 서버 응용 프로그램을 만드는 데 쉽게 사용할 수 있습니다.

내 이해가 정확합니까?그렇다면 이벤트 I/O의 이점은 무엇입니까? 동시성 측면에 더 많은 이점이 있습니까?그리고 Node.js가 JavaScript 기반(V8 기반) 프로그래밍 모델과 같은 프레임워크가 되는 방향이 있나요?

도움이 되었습니까?

해결책

장점은 다음과 같습니다.

  1. VM의 동적 언어 (JavaScript)의 웹 개발 (V8). Ruby, Python 또는 Perl보다 훨씬 빠릅니다.

  2. 단일 프로세스에서 최소한의 오버 헤드로 수천 개의 동시 연결을 처리하는 기능.

  3. JavaScript는 일류 기능 개체 및 클로저가있는 이벤트 루프에 적합합니다. 사람들은 이미 브라우저에서 사용하여 사용자가 시작한 이벤트에 응답하는 방법을 알고 있습니다.

  4. 많은 사람들이 이미 JavaScript, 프로그래머라고 주장하지 않는 사람들조차도 알고 있습니다. 아마도 가장 인기있는 프로그래밍 언어 일 것입니다.

  5. 웹 서버와 브라우저에서 JavaScript를 사용하면 방정식의 양쪽에서 동일하게 작동하는 JSON을 통해 데이터 구조를 통신 할 수있는 두 프로그래밍 환경 간의 임피던스 불일치가 줄어 듭니다. 중복 양식 유효성 검사 코드는 서버와 클라이언트 등을 공유 할 수 있습니다.

다른 팁

나는 직장에서 node.js를 사용하고 매우 강력하다고 생각합니다. node.js를 설명하기 위해 하나의 단어를 선택하도록 강요 받았을 때, 나는 "흥미로운"(순전히 긍정적 인 형용사가 아님)라고 말합니다. 공동체는 활기차고 성장하고 있습니다. JavaScript는 이상한 점에도 불구하고 코딩하기에 훌륭한 언어가 될 수 있습니다. 그리고 "모범 사례"와 잘 구조화 된 코드의 패턴에 대한 자신의 이해를 매일 다시 생각할 것입니다. 지금 Node.js로 흐르는 아이디어의 거대한 에너지가 있으며, 그 일을하면이 모든 생각에 당신을 노출시킵니다.

생산에서 Node.js는 확실히 가능하지만 문서에 의해 약속 된 "턴키"배치와는 거리가 멀다. node.js v0.6.x를 사용하면 "클러스터"는 플랫폼에 통합되어 필수 빌딩 블록 중 하나를 제공하지만 내 "Production.js"스크립트는 여전히 로그를 만드는 것과 같은 물건을 처리 할 수있는 ~ 150 라인의 논리입니다. 디렉토리, 죽은 노동자 등을 재활용하는 등 "심각한"생산 서비스를 위해서는 들어오는 연결을 조절하고 Apache가하는 모든 작업을 수행 할 준비가되어 있어야합니다. PHP. 공정하게 루비 on 레일 이것을 가지고 있습니다 정확한 문제. 그것은 두 가지 보완 메커니즘을 통해 해결됩니다. 1) Ruby를 Rails/node.js에 전용 웹 서버 뒤에 넣습니다 (C로 작성하고 지옥과 뒤로 테스트) nginx (또는 아파치 / Lighttd). Webserver는 정적 컨텐츠, 액세스 로깅, URL을 다시 작성하고 종료 할 수 있습니다. SSL, 액세스 규칙을 시행하고 여러 하위 서비스를 관리합니다. 실제 노드 서비스에 도달 한 요청의 경우 Webserver가 요청을 프록시합니다. 2) 같은 프레임 워크 사용 일각수 그것은 작업자 프로세스를 관리하고 주기적으로 재활용 할 수 있습니다. 나는 아직 완전히 구운 것처럼 보이는 node.js 서빙 프레임 워크를 찾지 못했습니다. 존재할 수도 있지만 아직 찾지 못했지만 여전히 손으로 달린 "Production.js"에서 ~ 150 줄을 사용합니다.

읽기 프레임 워크와 같은 표현하다 표준 관행은 하나의 jack-of-trades node.js service를 통해 모든 것을 제공하는 것처럼 보입니다. 하위로드 서비스 및 개발의 경우 아마도 괜찮을 것입니다. 그러나 서비스에 큰 시간을 부담하고 24/7을 실행하자마자 큰 사이트가 잘 구워지고 강화 된 C 코드와 같은 동기를 빨리 알게 될 것입니다. nginx 사이트를 앞두고 모든 정적 컨텐츠 요청을 처리합니다 (... cdn, 처럼 아마존 클라우드 프론트)). 이것에 대해 다소 유머러스하고 당혹스럽게 부정적인 것을 보려면 이 남자.

Node.js는 또한 점점 더 많은 비 서비스 용도를 찾고 있습니다. 웹 컨텐츠를 사용하기 위해 다른 것을 사용하더라도 Node.js를 빌드 도구로 사용할 수 있습니다. NPM 코드를 구성하는 모듈, Browserify 그것을 단일 자산으로 바느질하고 uglify-js 배포를 위해이를 최소화합니다. 웹을 다루기 위해 JavaScript는 완벽합니다. 임피던스 매치 그리고 종종 그것은 가장 쉬운 공격 경로입니다. 예를 들어, 많은 JSON 응답 페이로드, 당신은 내 사용해야합니다 밑줄 클리 모듈, 구조화 된 데이터의 유틸리티 벨트.

장단점 :

  • Pro : 서버 녀석의 경우 백엔드에 JavaScript를 작성하는 것은 현대 UI 패턴을 배우기위한 "게이트웨이 의약품"이었습니다. 더 이상 클라이언트 코드 작성을 두려워하지 않습니다.
  • Pro : 적절한 오류 확인을 장려하는 경향이 있습니다 (ERR은 거의 모든 콜백에 의해 반환됩니다. 프로그래머가 처리하기 위해 프로그래머를 잔소리합니다. 또한 Async.js 및 기타 라이브러리는 "이러한 하위 작업 중 하나라도 실패한 경우 실패"를 전형적인 동기 코드보다 훨씬 잘 처리합니다. )
  • Pro : 흥미롭고 일반적으로 어려운 작업은 비행중인 작업에 상태를 얻거나 작업자 간의 의사 소통 또는 캐시 상태를 공유하는 것과 같은 사소한 작업이됩니다.
  • Pro : Solid Package Manager (NPM)를 기반으로 한 거대한 커뮤니티와 수많은 훌륭한 도서관
  • CON : JavaScript에는 표준 라이브러리가 없습니다. 기능을 가져 오면 JSON.PARSE 또는 NPM 모듈을 추가 할 필요가없는 다른 빌드를 사용할 때 이상하게 느껴집니다. 이것은 5 가지 버전이 있음을 의미합니다. Node.js "Core"에 포함 된 모듈조차도 기본 구현에 불만을 가질 경우 5 개의 변형이 더 있습니다. 이것은 빠른 진화로 이어지고, 또한 어느 정도의 혼란을 초래합니다.

간단한 일 프로세스-요청 당 모델 (램프):

  • 프로 : 수천 개의 활성 연결에 확장 가능합니다. 매우 빠르고 매우 효율적입니다. 웹 차량의 경우 PHP 또는 Ruby와 비교하여 필요한 상자 수의 10 배 감소를 의미 할 수 있습니다.
  • Pro : 병렬 패턴을 작성하는 것은 쉽습니다. 3 개 (또는 N) 덩어리를 가져와야한다고 상상해보십시오. memcached. PHP에서 이것을 수행하십시오 ... 단지 코드를 작성 했습니까? 와우, 느린다. 특별한 것이 있습니다 PECL MemCached의 특정 문제를 해결하기위한 모듈이지만 데이터베이스 쿼리와 병렬로 밈 데이터를 가져 오려면 어떻게해야합니까? Node.js에서는 패러다임이 비동기식이기 때문에 웹 요청이 여러 가지를 동시에 수행하는 것은 매우 자연 스럽습니다.
  • CON : 비동기 코드는 기본적으로 동기 코드보다 근본적으로 더 복잡하며, 동시 실행이 실제로 무엇을 의미하는지에 대한 확실한 이해없이 개발자에게는 최후의 학습 곡선이 어려울 수 있습니다. 그럼에도 불구하고 잠금으로 여러 종류의 멀티 스레드 코드를 작성하는 것보다 훨씬 어렵습니다.
  • CON : 예를 들어 100ms에 대한 컴퓨팅 집약적 요청이 실행되면 동일한 node.js 프로세스에서 처리되는 다른 요청을 처리합니다 ... aka. 협동 조합 다 배설. 이것은 웹 워커 패턴으로 완화 될 수 있습니다 (비싼 작업을 처리하기 위해 하위 프로세스를 회전시킵니다). 또는 많은 node.js 작업자를 사용하고 각각의 요청을 동시에 처리하도록 할 수 있습니다 (프로세스 재활용이 없기 때문에 여전히 상당히 효율적입니다).
  • CON : 생산 시스템을 실행하는 것은 CGI Apache + PHP와 같은 모델, , 루비, 처리되지 않은 예외는 전체 프로세스를 중단하여 실패한 작업자를 다시 시작하려면 논리가 필요합니다 ( 무리). 버그 기본 코드가있는 모듈은 프로세스를 강하게 충돌 할 수 있습니다. 작업자가 사망 할 때마다 처리 된 요청이 삭제되므로 하나의 버기 API는 다른 공동 공동 API의 서비스를 쉽게 저하시킬 수 있습니다.

Java / C# / C에서 "실제"서비스를 작성하는 것과 (C? Reall?)

  • Pro : Node.js에서 비동기식을하는 것은 다른 곳에서 스레드 안전성을 수행하는 것보다 쉽고 논란의 여지가 더 큰 이점을 제공합니다. Node.js는 내가 일한 적이없는 고통스러운 비동기 패러다임입니다. 좋은 라이브러리를 사용하면 동기 코드를 작성하는 것보다 약간 어렵습니다.
  • 프로 : 멀티 스레딩 / 잠금 버그가 없습니다. 사실, 당신은 차단 작업이없는 적절한 비동기 워크 플로를 표현하는 더 많은 장황 코드를 작성하는 데 전선을 투자합니다. 또한 테스트를 작성하고 일을해야합니다 (스크립팅 언어이며 뚱뚱한 핑거링 변수 이름은 단위 테스트 시간에만 잡혔습니다). 그러나 일단 작동하면 표면적이 Heisenbugs - 백만 실행에서 한 번만 나타나는 이상한 문제- 그 표면적은 훨씬 낮습니다. Node.js 코드를 작성하는 세금은 코딩 단계에 크게 전면로드됩니다. 그런 다음 안정적인 코드로 끝나는 경향이 있습니다.
  • Pro : JavaScript는 기능을 표현하기에 훨씬 가볍습니다. 말로 이것을 증명하기는 어렵지만 JSON, 동적 타이핑, 람다 표기법, 프로토 타입 상속, 가벼운 모듈 등 무엇이든 ... 동일한 아이디어를 표현하기 위해 코드가 줄어드는 경향이 있습니다.
  • CON : 아마도 당신은 정말로, Java의 코딩 서비스를 정말 좋아합니까?

JavaScript 및 Node.js에 대한 또 다른 관점은 확인하십시오. Java에서 Node.js까지, Java 개발자의 인상과 경험 학습 node.js에 대한 블로그 게시물.


모듈노드를 고려할 때는 JavaScript 라이브러리 선택이 정의하다 당신의 경험. 대부분의 사람들은 최소 2 개, 비동기 패턴 도우미 (단계, 선물, 비동기) 및 JavaScript 설탕 모듈을 사용합니다.aUNDSCORE.JS).

도우미 / 자바 스크립트 설탕 :

  • aUNDSCORE.JS - 이것을 사용하십시오. 그냥 해. _.isstring () 및 _.isarray ()와 같은 것들로 코드를 훌륭하고 읽을 수있게합니다. 그렇지 않으면 안전 코드를 어떻게 작성할 수 있는지 잘 모르겠습니다. 또한 향상된 명령 라인 FU를 위해 내 직접 확인하십시오. 밑줄 클리.

비동기 패턴 모듈 :

  • 단계 - 직렬 및 병렬 동작의 조합을 표현하는 매우 우아한 방법. 내 개인적인 추천. 보다 내 게시물 단계 코드가 어떻게 생겼는지
  • 선물 - 요구 사항을 통해 주문을 표현하는 훨씬 더 유연합니다 (정말 좋은 일입니까?). "A, B, C 시작을 병렬로 시작할 수 있습니다. A 및 B가 끝나면 AB를 시작할 때 A 및 C가 끝나면 AC를 시작하십시오." 이러한 유연성은 워크 플로에서 버그를 피하기 위해 더 많은주의를 기울여야합니다 (콜백을 호출하지 않거나 여러 번 호출). 보다 Raynos의 게시물 선물을 사용하는 경우 (이것은 나를 "얻는"미래를 만든 게시물입니다).
  • 비동기 - 각 패턴마다 하나의 방법을 가진보다 전통적인 라이브러리. 나는 종교적 개종 전에 단계로 시작했고, 이후의 모든 패턴이 단일 더 읽기 쉬운 패러다임으로 단계적으로 표현 될 수 있다는 사실을 실현하기 시작했다.
  • tamejs - Okcupid가 작성한이 제품은 연재 및 병렬 워크 플로우를 우아하게 작성하기 위해 새로운 언어 프리미티브 "Await"를 추가하는 프리 컴파일러입니다. 패턴은 놀랍게 보이지만 사전 컴파일이 필요합니다. 나는 아직도 이것에 대해 내 마음을 구성하고있다.
  • streamlinejs - tamejs의 경쟁자. 나는 길들이기에 기대고 있지만, 당신은 당신의 마음을 구성 할 수 있습니다.

또는 비동기 라이브러리에 관한 모든 것을 읽으려면 이 패널 인터뷰 저자와 함께.

웹 프레임 워크 :

  • 표현하다 웹 사이트 구성을위한 Great Ruby on Rails-ESK 프레임 워크. 사용합니다 XML/HTML 템플릿 엔진으로서 HTML을 건물을 훨씬 덜 고통스럽고 거의 우아하게 만듭니다.
  • jQuery 기술적으로는 노드 모듈이 아니지만 jQuery는 클라이언트 측 사용자 인터페이스의 요점이 빠르게 표준이되고 있습니다. JQuery는 CSS와 유사한 선택기를 제공하여 DOM 요소 세트에 대해 '쿼리'를 제공합니다 (세트 핸들러, 속성, 스타일 등). 같은 맥락을 따라 트위터 부트 스트랩 CSS 프레임 워크, backbone.js 용을 위해 MVC 패턴 및 Browserify.js 모든 JavaScript 파일을 단일 파일로 스티칭하려면. 이 모듈은 모두 요점 표준이되므로 적어도 들어 본 적이없는 경우 확인해야합니다.

테스트 :

  • Jshint - 사용해야합니다. 나는 처음에는 이것을 사용하지 않았으며 이제는 이해할 수없는 것처럼 보입니다. JSLINT는 Java와 같은 편집 된 언어로 얻을 수있는 기본 검증을 추가합니다. 일치하지 않은 괄호, 선언되지 않은 변수, 많은 모양과 크기의 타입. 당신은 또한 내가 당신이 당신의 차 한잔이라면 괜찮은 일이 좋을 때, 당신이 "항문 모드"라고 부르는 다양한 형태의 "항문 모드"라고 부를 수 있습니다. ")") "... 코드를 실행하지 않고 불쾌한 줄을 쳤다. "Jshint"는보다 유사 할 수있는 변형입니다 더글러스 크록 포드'에스 jslint.
  • 모카 내가 선호하기 시작한 서약에 대한 경쟁자. 두 프레임 워크 모두 기본 사항을 충분히 처리하지만 복잡한 패턴은 모카에서 표현하기 쉬운 경향이 있습니다.
  • 서약 서약은 정말 우아합니다. 그리고 그것은 어떤 테스트 사례가 통과 / 실패했는지 보여주는 멋진 보고서 (-spec)를 인쇄합니다. 30 분 동안 배우면 최소한의 노력으로 모듈에 대한 기본 테스트를 만들 수 있습니다.
  • 좀비 -HTML 및 JavaScript 사용에 대한 헤드리스 테스트 JSDOM 가상 "브라우저"로. 매우 강력한 것들. 그것을 결합하십시오 다시 하다 브라우저 내 코드의 번개 빠른 결정 론적 테스트를받습니다.
  • "생각"테스트 방법에 대한 의견 :
    • 테스트는 비 옵션입니다. JavaScript와 같은 역동적 인 언어를 사용하면 있습니다 매우 정적 검사는 거의 없습니다. 예를 들어, 코드가 실행될 때까지 4를 기대하는 메소드에 두 매개 변수를 전달합니다. JavaScript에서 버그를 만들기위한 꽤 낮은 막대. 기본 테스트는 컴파일 된 언어로 검증 격차를 유지하는 데 필수적입니다.
    • 유효성 검사를 잊고 코드를 실행하십시오. 모든 방법에 대해, 첫 번째 검증 사례는 "아무것도 깨지지 않는다"는 것이며, 이것이 가장 자주 발생하는 경우입니다. 코드를 던지지 않고 코드가 실행되면 버그의 80%를 잡을 수 있으며 코드 신뢰를 향상시키기 위해 많은 노력을 기울여서 다시 돌아가서 건너 뛰는 미묘한 검증 사례를 추가 할 수 있습니다.
    • 작게 시작하고 관성 장벽을 깨십시오. 우리는 모두 게으르고 시간 동안 압박을 받았으며 테스트를 "추가 작업"으로 쉽게 볼 수 있습니다. 따라서 작게 시작하십시오. 테스트 케이스 0- 모듈을로드하고 성공을보고하십시오. 자신 이이 일을 많이하도록 강요한다면 테스트에 대한 관성 장벽이 고장납니다. 문서를 읽는 것을 포함하여 처음으로 30 분 미만입니다. 이제 테스트 케이스 1을 작성하십시오 - 방법 중 하나를 호출하고 "아무것도 깨지지 않는다", 즉 오류가 없음을 확인하십시오. 테스트 케이스 1은 1 분도 채 걸리지 않아야합니다. 관성이 사라지면 테스트 범위를 점진적으로 확장하기가 쉬워집니다.
    • 이제 코드로 테스트를 발전시킵니다. "올바른"엔드 투 엔드 테스트가 모의 서버와 그 모든 것의 모습에 대해 협박하지 마십시오. 코드는 단순하게 시작하여 새로운 사례를 처리하기 위해 진화합니다. 테스트도해야합니다. 코드에 새로운 사례와 새로운 복잡성을 추가 할 때 테스트 케이스를 추가하여 새 코드를 연습하십시오. 버그를 찾을 때 결함이있는 코드를 다루기 위해 검증 및 / 또는 새 사례를 추가하십시오. 디버깅을하고 코드에 대한 자신감을 잃을 때, 돌아가서 테스트를 추가하여 그것이 생각하는 일을하고 있음을 증명하십시오. 예제 데이터의 문자열 (다른 서비스, 긁힌 웹 사이트 등)을 캡처하여 구문 분석 코드에 공급하십시오. 여기서 몇 가지 사례가 개선 된 검증이 개선되며 매우 신뢰할 수있는 코드로 끝날 것입니다.

또한 확인하십시오 공식 목록 권장 Node.js 모듈 하지만, Github 's 노드 모듈 위키 훨씬 더 완전하고 좋은 자원입니다.


노드를 이해하려면 몇 가지 주요 설계 선택을 고려하는 것이 도움이됩니다.

node.js입니다 이벤트 기반 그리고 비동기 / 비 차단. 들어오는 HTTP 연결과 같은 이벤트는 약간의 작업을 수행하고 데이터베이스에 연결하거나 다른 서버에서 콘텐츠를 가져 오는 것과 같은 다른 비동기 작업을 시작하는 JavaScript 기능을 시작합니다. 이러한 작업이 시작되면 이벤트 기능이 완료되고 Node.js가 다시 잠들게됩니다. 데이터베이스 연결이 설정되거나 컨텐츠로 응답하는 외부 서버와 같은 다른 일이 발생하자마자 콜백 기능이 발사되고 더 많은 JavaScript 코드가 실행되므로 데이터베이스 쿼리와 같은 더 많은 비동기 작업이 시작됩니다. 이러한 방식으로 Node.js는 여러 병렬 워크 플로에 대한 활동을 행복하게 인터 리브하여 언제든지 차단 해제되는 활동을 실행합니다. 이것이 Node.js가 수천 개의 동시 연결을 관리하는 훌륭한 작업을 수행하는 이유입니다.

다른 사람과 마찬가지로 연결 당 하나의 프로세스/스레드를 사용하지 않는 이유는 무엇입니까? Node.js에서 새로운 연결은 매우 작은 힙 할당입니다. 새로운 프로세스를 회전시키는 데는 일부 플랫폼에서 메모리 인 메모리가 훨씬 더 많아집니다. 그러나 실제 비용은 컨텍스트 전환과 관련된 오버 헤드입니다. 10^6 개의 커널 스레드가 있으면 커널은 누가 다음에 실행 해야하는지 알아내는 많은 작업을 수행해야합니다. Linux 용 O (1) 스케줄러를 구축하는 데 많은 작업이 진행되었지만 결국 CPU 시간과 경쟁하는 10^6 프로세스보다 단일 이벤트 중심 프로세스를 갖는 것이 더 효율적입니다. 또한 과부하 조건에서 다중 프로세스 모델은 매우 열악하게 작동하며, 특히 SSHD (특히 SSHD를 굶주림) (실제로는 얼마나 망가 졌는지 파악할 수 없음).

node.js입니다 단일 스레드 그리고 잠금. 매우 의도적 인 설계 선택은 프로세스 당 단일 스레드 만 있습니다. 이 때문에 여러 스레드가 데이터에 동시에 액세스하는 것은 근본적으로 불가능합니다. 따라서 자물쇠가 필요하지 않습니다. 스레드는 어렵습니다. 정말 힘들어요. 당신이 그것을 믿지 않는다면, 당신은 충분한 스레드 프로그래밍을 수행하지 않았습니다. 올바르게 잠그는 것은 어렵고 실제로 추적하기 어려운 버그를 초래합니다. 자물쇠와 멀티 스레딩을 제거하면 가장 멋진 버그 클래스 중 하나가 사라집니다. 이것은 노드의 가장 큰 장점 일 수 있습니다.

하지만 16 핵심 상자를 어떻게 활용합니까?

두 가지 방법:

  1. 이미지 인코딩과 같은 큰 무거운 컴퓨팅 작업의 경우 Node.js는 자식 프로세스를 시작하거나 추가 작업자 프로세스로 메시지를 보낼 수 있습니다. 이 디자인에는 이벤트 흐름을 관리하는 스레드가 하나 있고 N 프로세스가 무거운 컴퓨팅 작업을 수행하고 다른 15 CPU를 씹습니다.
  2. 웹 서비스에서 처리량을 스케일링하려면 하나의 상자에 여러 node.js 서버를 실행해야합니다. 무리 (node.js v0.6.x를 사용하면 여기에 연결된 공식 "클러스터"모듈은 API가 다른 LearnBoost 버전을 대체합니다). 이 로컬 Node.js 서버는 소켓에서 경쟁하여 새로운 연결을 수락하여로드를 균형을 유지할 수 있습니다. 연결이 수락되면 이러한 공유 프로세스 중 하나에 단단히 결합됩니다. 이론적으로 이것은 나쁘게 들리지만 실제로는 잘 작동하며 스레드 안전 코드를 작성하는 두통을 피할 수 있습니다. 또한 이는 Node.js가 메모리 대역폭을보다 효과적으로 사용하여 우수한 CPU 캐시 친화력을 가져옵니다.

node.js를 사용하면 땀을 흘리지 않고 정말 강력한 일을 할 수 있습니다. 다양한 작업을 수행하는 Node.js 프로그램이 있다고 가정합니다. TCP 명령에 대한 포트, 일부 이미지를 인코딩합니다. 5 줄의 코드를 사용하면 활성 작업의 현재 상태를 보여주는 HTTP 기반 웹 관리 포털을 추가 할 수 있습니다. 이것은 쉬운 일입니다 :

var http = require('http');
http.createServer(function (req, res) {
    res.writeHead(200, {'Content-Type': 'text/plain'});
    res.end(myJavascriptObject.getSomeStatusInfo());
}).listen(1337, "127.0.0.1");

이제 URL을 치고 실행중인 프로세스 상태를 확인할 수 있습니다. 몇 개의 버튼을 추가하면 "관리 포털"이 있습니다. 실행중인 Perl / Python / Ruby 스크립트가있는 경우 "관리 포털에 던지는 것"만으로는 간단하지 않습니다.

그러나 JavaScript가 느리게 / 나쁜 / 사악한 / Spawn-of-the-Devil이 아닌가? JavaScript에는 이상한 이상한 이상한 점이 있지만 "좋은 부분"에는 매우 강력한 언어가 있으며 어쨌든 JavaScript는 클라이언트 (브라우저)의 언어입니다. JavaScript는 여기에 있습니다. 다른 언어는이를 IL로 목표로 삼고 있으며 세계적 수준의 인재는 가장 진보 된 JavaScript 엔진을 생산하기 위해 경쟁하고 있습니다. 브라우저에서 JavaScript의 역할로 인해 JavaScript를 빨리 타 오르기 위해 엄청난 양의 엔지니어링 노력이 발생하고 있습니다. v8 적어도 이번 달에는 최신 및 가장 큰 JavaScript 엔진입니다. 효율성과 안정성으로 다른 스크립팅 언어를 날려 버립니다 (Ruby). 그리고 Microsoft, Google 및 Mozilla에서 문제를 해결하는 거대한 팀이 최고의 JavaScript 엔진을 구축하기 위해 경쟁하면서 더 나아질 것입니다 (모든 현대 엔진이 수많은 JavaScript "통역사가 아닙니다. jit Execute-Once 코드의 폴백으로 만 해석 된 후드 아래에서 컴파일). 예, 우리 모두는 Odder JavaScript 언어 선택을 고칠 수 있기를 바랍니다. 그러나 실제로 그렇게 나쁘지는 않습니다. 그리고 언어는 너무 유연하여 JavaScript를 코딩하지 않기 때문에 다른 언어보다 JavaScript에서 라이브러리는 경험을 정의합니다. 웹 애플리케이션을 구축하려면 어쨌든 JavaScript를 알아야하므로 서버에서 코딩하는 데 일종의 기술 설정 시너지가 있습니다. 클라이언트 코드 작성을 두려워하지 않았습니다.

게다가, 당신이 정말로 JavaScript를 싫어한다면, 당신은 구문 설탕을 사용할 수 있습니다. 커피 스크립트. 또는 JavaScript 코드를 작성하는 다른 것 Google 웹 툴킷 (GWT).

JavaScript에 대해 말하면 "클로저"는 무엇입니까? - 통화 체인을 가로 질러 어휘 스코프 변수를 유지한다고 말하는 멋진 방법입니다. ;) 이와 같이:

var myData = "foo";
database.connect( 'user:pass', function myCallback( result ) {
    database.query("SELECT * from Foo where id = " + myData);
} );
// Note that doSomethingElse() executes _BEFORE_ "database.query" which is inside a callback
doSomethingElse();

물체에 숨어있는 것처럼 어색한 일을하지 않고 "mydata"를 어떻게 사용할 수 있는지 보시겠습니까? Java와 달리 "MyData"변수는 읽기 전용 할 필요가 없습니다. 이 강력한 언어 기능은 비동기식 프로그래밍을 훨씬 덜 장황하고 덜 고통스럽게 만듭니다.

비동기 코드를 작성하는 것은 간단한 단일 스레드 스크립트를 작성하는 것보다 항상 더 복잡 할 것이지만 Node.js를 사용하면 그다지 어렵지 않으며 수천 개의 동시 연결에 대한 효율성과 확장 성 외에도 많은 이점을 얻습니다. ..

v8 JavaScript의 구현입니다. 독립형 JavaScript 응용 프로그램을 실행할 수 있습니다.

Node.js는 단순히 I/O를 이벤트로하는 V8 용으로 작성된 라이브러리입니다. 이 개념은 설명하기가 약간 까다 롭습니다. 누군가가 나보다 더 나은 설명으로 대답 할 것이라고 확신합니다 ... 요점은 입력이나 출력을 수행하고 그것이 일어나기를 기다리는 대신, 당신은 ~하지 않다 끝날 때까지 기다립니다. 예를 들어, 파일의 마지막 편집 시간을 요청하십시오.

// Pseudo code
stat( 'somefile' )

몇 밀리 초가 걸릴 수도 있고 몇 초가 걸릴 수 있습니다. 이벤트와 함께 I/O 당신은 단순히 요청을 발사하고 주위를 기다리는 대신 요청이 완료 될 때 실행되는 콜백을 첨부합니다.

// Pseudo code
stat( 'somefile', function( result ) {
  // Use the result here
} );
// ...more code here

이것은 브라우저에서 JavaScript 코드와 매우 유사합니다 (예 : Ajax 스타일 기능).

자세한 내용은 기사를 확인해야합니다. Node.js는 진정으로 흥미 진진합니다 도서관/플랫폼에 대한 나의 소개였습니다 ... 나는 그것이 아주 좋았다는 것을 알았습니다.

node.js 서버 측 JavaScript 코드를 위해 구축 된 오픈 소스 명령 줄 도구입니다. 당신은 a를 다운로드 할 수 있습니다 타르 볼, 소스를 컴파일하고 설치하십시오. JavaScript 프로그램을 실행할 수 있습니다.

JavaScript는 다음에 의해 실행됩니다 v8, Google에서 개발 한 JavaScript 엔진 크롬 브라우저. JavaScript API를 사용하여 네트워크 및 파일 시스템에 액세스합니다.

성능과 병렬 작업을 수행하는 능력으로 인기가 있습니다.

node.js 이해 가장 좋은 설명입니다 node.js 나는 지금까지 발견했다.

다음은 주제에 대한 좋은 기사입니다.

클로저는 그것이 생성 된 컨텍스트에서 코드를 실행하는 방법입니다.

이것이 동시에 의미하는 바는 변수를 정의한 다음 비 차단을 시작할 수 있다는 것입니다. I/O 기능을하고 콜백에 대한 익명 기능을 보내십시오.

작업이 완료되면 콜백 함수가 변수와 관련하여 컨텍스트에서 실행됩니다. 이것은 폐쇄입니다.

클로즈가 비 차단 I/O를 사용하여 응용 프로그램을 작성하는 데 좋은 이유는 비동기 적으로 실행되는 기능의 컨텍스트를 관리하는 것이 매우 쉽기 때문입니다.

두 가지 좋은 예는 템플릿을 관리하고 점진적인 개선 사항을 사용하는 방법에 관한 것입니다.완벽하게 작동하려면 몇 가지 가벼운 JavaScript 코드 조각만 있으면 됩니다.

다음 기사를 시청하고 읽어 보시기 바랍니다.

어떤 언어든 선택하고 HTML 파일 템플릿을 관리하는 방법과 단일 템플릿을 업데이트하기 위해 수행해야 했던 작업을 기억해 보십시오. CSS 당신의 수업 이름 DOM 구조(예를 들어 사용자가 메뉴 항목을 클릭하면 해당 항목이 "선택됨"으로 표시되고 페이지의 콘텐츠가 업데이트되기를 원함)

Node.js를 사용하면 클라이언트 측 JavaScript 코드에서 수행하는 것만큼 간단합니다.DOM 노드를 가져와 CSS 클래스를 적용하세요.DOM 노드를 가져오고 콘텐츠를 innerHTML로 만듭니다. 이를 수행하려면 추가 JavaScript 코드가 필요합니다.자세한 내용은 기사를 읽어보십시오).

또 다른 좋은 예는 동일한 코드를 사용하여 웹 페이지를 JavaScript 활성화 또는 비활성화와 호환되도록 만들 수 있다는 것입니다.사용자가 달력을 사용하여 원하는 날짜를 선택할 수 있도록 JavaScript로 날짜를 선택했다고 가정해 보세요.동일한 JavaScript 코드를 작성(또는 사용)하여 JavaScript를 켜거나 끈 상태에서 작동하도록 할 수 있습니다.

Node.js의 이벤트 중심 모델을 가장 잘 설명하는 매우 좋은 패스트 푸드 장소 비유가 있습니다. 전체 기사를 참조하십시오. Node.js, 의사의 사무실 및 패스트 푸드 레스토랑-이벤트 중심 프로그래밍 이해

요약은 다음과 같습니다.

패스트 푸드 조인트가 전통적인 스레드 기반 모델을 따르는 경우 음식을 주문하고받을 때까지 줄을 서서 기다릴 것입니다. 당신 뒤에있는 사람은 당신의 주문이 끝날 때까지 주문할 수 없습니다. 이벤트 중심 모델에서는 음식을 주문한 다음 줄을 서서 기다릴 수 있습니다. 그런 다음 다른 모든 사람들은 자유롭게 주문할 수 있습니다.

Node.js는 이벤트 중심이지만 대부분의 웹 서버는 Thread 기반입니다. York는 Node.js의 작동 방식을 설명합니다.

  • 웹 브라우저를 사용하여 Node.js 웹 서버에서 "/about.html"을 요청합니다.

  • Node.js 서버는 요청을 수락하고 디스크에서 해당 파일을 검색하는 함수를 호출합니다.

  • Node.js 서버가 파일이 검색되기를 기다리는 동안 다음 웹 요청에 서비스를 제공합니다.

  • 파일이 검색되면 Node.js 서버 큐에 삽입되는 콜백 기능이 있습니다.

  • Node.js 서버는이 경우 해당 함수를 실행하여 "/about.html"페이지를 렌더링하고 웹 브라우저로 다시 보냅니다. "

잘, 나는 이해

  • 노드의 목표는 확장 가능한 네트워크 프로그램을 쉽게 구축 할 수있는 방법을 제공하는 것입니다.
  • 노드는 설계에서 유사하고 Ruby의 이벤트 머신이나 Python의 Twisted와 같은 시스템의 영향을받습니다.
  • V8 JavaScript의 I/O 이벤트.

나에게 그것은 당신이 세 가지 가정 모두에서 옳았다는 것을 의미합니다. 도서관은 확실히 유망 해 보인다!

또한 Google의 V8이 매우 빠르다는 것을 언급하는 것을 잊지 마십시오. 실제로 JavaScript 코드를 컴파일 된 바이너리의 성능으로 기계 코드로 변환합니다. 그래서 다른 모든 위대한 것들과 함께, 그것은 미친 듯이 빠릅니다.

Q : 프로그래밍 모델은 특히 처리 방식입니다. I/O.

옳은. 콜백을 사용하므로 파일 시스템에 액세스하도록 요청하면 요청이 파일 시스템으로 전송되면 Node.js가 다음 요청을 처리하기 시작합니다. 파일 시스템에서 응답을 받으면 I/O 요청에 대해서만 걱정됩니다.이 시점에서 콜백 코드가 실행됩니다. 그러나 동기식 I/O 요청을 할 수 있습니다 (즉, 요청을 차단). 비동기식 (콜백) 또는 동기 (대기) 중에서 선택하는 것은 개발자에게 달려 있습니다.

Q : JavaScript를 사용하고 파서는 v8입니다.

Q : 동시 서버 응용 프로그램을 작성하는 데 쉽게 사용할 수 있습니다.

예, 많은 JavaScript를 핸드 코딩해야합니다. 다음과 같은 프레임 워크를 보는 것이 좋습니다. http://www.easynodejs.com/ - 전체 온라인 문서와 샘플 응용 프로그램이 제공됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top