node.js와 Tornado의 차이점 [닫힌]


79

node.js가 JS로 작성되고 Tornado로 Python으로 작성된다는 사실 외에, 둘 사이의 차이점은 무엇입니까? 둘 다 비 차단 비동기 웹 서버입니다. 맞죠? 언어 외에 다른 것을 선택하는 이유는 무엇입니까?

답변:


97

node.js의 가장 큰 장점은 모든 라이브러리가 비동기 적이라는 것입니다. 이므로 차단에 대해 많이 걱정할 필요가 없다는 것입니다. mysql, postgres, redis 등에 대한 비동기 라이브러리가 있습니다. 모두 기본적으로 비동기입니다.

Python에는 모든 것을위한 라이브러리가 있지만 대부분의 라이브러리는 비동기식이 아닙니다. 토네이도를 이용하려면 (프로세스를 차단하지 않고) 특수 라이브러리가 필요합니다 (예 : 'pip install redis'만 사용할 수없고 brukva 와 같은 것이 필요합니다 ). node.js 라이브러리보다 토네이도 라이브러리. 예를 들어, 현재 사용할 수있는 비동기 mysql 토네이도 드라이버가 없습니다 (또는 적어도 나는 그것을 알지 못합니다).

그러나 토네이도 (i / o를 수행하지 않는 라이브러리)와 함께 많은 파이썬 라이브러리를 계속 사용할 수 있으며 토네이도 커뮤니티는 격차를 늘리고 메우고 있습니다.

내 경험상 토네이도를 사용하는 것보다 node.js를 사용하여 앱을 작성하는 것이 더 쉽습니다. 필자는 Python 프로젝트의 기존 인프라에 더 잘 맞기 때문에 node.js에서 tornado로 전환했습니다 (html 페이지를 제공하는 django 사이트와 실시간 기능을 제공하는 tornado 서버 간의 통합은 매우 고통스럽지 않았습니다).


24
tornado는 이제 twisted의 모든 비동기 라이브러리에 액세스 할 수 있습니다 ( tornadoweb.org/documentation/twisted.html 참조 ). 그러나 원래의 질문은 언어를 고려하지 말라고 명시 적으로 제안했지만, 파이썬에는 생성기가 있고 비동기 코드를 훨씬 쉽게 작성하는 것이 중요합니다. 자바 스크립트에는 그런 것이 없습니다. V8 (Step 등)에서 누락 된 수율을 해결하기 위해 노력하는 수십 개의 라이브러리가 있지만 언어 지원이 없으면 구문이 그리 예쁘지 않고 파이썬의 'yield'보다 적은 경우를 처리합니다.
Mikhail Korobov

1
미하일, 당신은 자바 스크립트에서 생성기에 대한 지원 부족에 대해 틀 렸습니다. JavaScript 1.7의 제너레이터 구현에 대한 정보를 참조하십시오 (현재 버전 인 1.8.2는 2009 년 중반에 있음) : JavaScript 1.7의 새로운 기능 : Generators .
Tadeck

8
node.js 언어는 Javascript 1.7 또는 1.8이 아닌 ECMAScript5에 더 가깝습니다. 이는 node.js가 모든 JavaScript 1.7 기능을 구현하지 않는 V8 엔진을 사용하기 때문입니다 ( code.google.com/p/v8/issues/detail?id=890 참조 ). 이는 향후 변경 될 수 있습니다, 그 (예 : JS 1.7 표준 없음)에 대한 타당한 이유가있을 수 있지만, 자바 스크립트 1.7은 2006 년에 도입되었고, '수율'2012 년 V8에없는
미하일 코로 보프

3
당신 말이 맞습니다. 저는 당신이 JavaScript에 생성기가 없다고 말하는 것처럼 당신의 의견을 해석했습니다. 내 실수.
Tadeck

4
이 답변은 2 년 후에 업데이트됩니까?
nkint

13

Rich Bradshaw가 지적했듯이 Node.js 는 JS로 작성 되었으므로 프런트 엔드와 백 엔드를 동일한 언어로 유지하고 일부 코드베이스를 공유 할 수 있습니다. 나에게 그것은 Node.js 의 엄청난 잠재적 인 이점입니다 . Node는 또한 상자에서 나오는 더 많은 비동기 라이브러리를 제공합니다.

V8은 적어도 벤치 마크가 제안하는 것처럼 JS를 Python보다 빠르게 만들어야 하지만 Node.jsTornado (및 그 문제에 대한 대부분의 다른 웹 프레임 워크) 모두 네이티브 라이브러리 용 래퍼를 사용 하기 때문에 중요하지 않을 수 있습니다 . 많은 Python 표준 라이브러리가 C로 작성되거나 더 빠른 대안으로 대체 될 수 있으므로 잠재적 인 차이를 훨씬 더 완화 할 수 있습니다.

웹 서비스는 일반적으로 I / O 바운드이므로 데이터를 처리하지 않고 데이터 저장소를 기다리는 데 시간을 소비합니다. 이는 많은 애플리케이션에서 JS와 Python의 합성 속도 차이를 무의미하게 만듭니다.


1
아주 올바른 관점
securecurve 2013 년

10

node.js는 어셈블리 코드로 컴파일되는 V8을 사용하지만 tornado는 아직 그렇게하지 않습니다.

그 외에는 (실제로 속도에 큰 차이가없는 것 같음) 생태계입니다. JS의 이벤트 모델을 선호합니까, 아니면 Python이 작동하는 방식을 선호합니까? Python 또는 JS 라이브러리를 사용하는 것이 더 만족 스럽습니까?


6
간단한 단일 프로세스 helloworld 앱에 대해 httperf를 실행합니다. PyPy 1.8의 Tornado (~ 8k req / s)는 Node의 성능 (~ 11k req / s)보다 멀지 않습니다.
jholster 2012 년

2
V8은 어셈블리가 아닌 기계 코드로 컴파일됩니다. 그리고 컴파일이 정적 인 것이 아니라 적시에 수행되는 것이 중요합니다. en.wikipedia.org/wiki/V8_(JavaScript_engine)
Max Heiber

3

Nodejs는 또한 Socket.io라는 웹 소켓의 원활한 통합 / 구현을 가지고 있습니다. 소켓-이벤트를 지원하는 브라우저를 처리하고 이전 브라우저에 대한 역방향 폴링 호환성도 제공합니다. 알림 프레임 워크 또는 유사한 이벤트 기반 프로그래밍이 필요한 개발이 매우 빠릅니다.


다음 업데이트가 지원 측면에서 올 때 전적으로 의존하는 socket.io의 분기 된 구현 인 socketTornad가 있습니다. 여기서 언급 한 요점은 많은 시나리오 처리를 줄이는 nodejs의 socket.io의 아름다움이었습니다.
Sushant Khurana 2012

6
당신이 무슨 말을하는지 전혀 모릅니다. 그 프로젝트는 오래되고 구식입니다. Tornadio는 socket.io 참조 릴리스로 업데이트 된 상태를 유지합니다 : github.com/MrJoes/tornadio2
jdi

3

파이썬에 대한 개인적인 환경이 없다면 NodeJS를 사용하는 것이 좋습니다. 나는 Python을 많이 좋아하지만 비동기의 경우 노드 대신 Tornado를 선택하고 나중에 작업을 수행하는 방법이나 비동기 지원이있는 라이브러리를 찾는 데 어려움을 겪어야했습니다 (예 : Cassandra는 테스트에서 비동기를 사용하지만 cqlengine을 사용할 수있는 방법을 찾을 수 없습니다. async. 이미 마감 시간을 초과했기 때문에 Mongo를 선택해야했습니다). 성능 및 비동기 측면에서 노드는 토네이도보다 훨씬 좋습니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.