2013-05-16 12 views
7

node.js가 실제로 브라우저와 통신하지 않는 서버 측 응용 프로그램에 좋으면 궁금합니다. 브라우저 통신은 관리를 위해 사용되는 전체 응용 프로그램의 일부분 일뿐입니다.서버 대 서버 통신을위한 Node.js

아이디어는 간단

  1. 서버는 다른 서버로부터 사용자 데이터를 포함하는 짧은 메시지로 UDP 트래픽의 많은 양을 수신한다.

  2. 각 메시지 앱은 DB 검색을 수행하고 허용 목록에없는 사용자 ID로 메시지를 필터링합니다.

  3. 필터링 된 메시지가 처리되어 다른 DB를 업데이트하거나 다른 서버로 데이터를 보냅니다.

그런 경우, node.js를 배우는 좋은 시나리오입니까, 아니면 Java EE와 비교하면 어떤 이점이 있습니까?

+3

나는이 문서 (데이터베이스에 따라 다름)를 작성하고, 문서를 보려면 http://nodejs.org/api/dgram.html을 확인하는 훌륭한 애완 동물 프로그램이라고 생각한다. –

+1

대부분의 시간이 IO에서 소비된다면 노드가 가장 잘 작동한다. db, 디스크, 네트워크 등). 앱이 IO를 수행하는 동안 노드는 더 많은 요청을 처리 할 수 ​​있습니다. CPU 집약적 인 처리를 많이한다면, 그 일을하는 것 외에는 아무것도하지 않아도됩니다. 어쩌면 "필터링 된 메시지가 처리됩니다." 처리 비용이 비싼 경우 문제가 발생할 수 있습니다. –

+0

Java EE에 문제가 있습니까? 공연이나 동시성? 당신은 자바 내에서 동시성에 대한 솔루션을 많이 가지고, 다른 언어로 다른 레이어를 추가 할 가치가있다, 내가 그렇게 생각하지 않는, 당신이 실패한 시도하지 않는 한. – mpm

답변

3

면책 조항 : 나는 node.js에 기여하고 그 사용을 장려하는 회사에서 일하므로 내 의견에 편향 될 수 있습니다.

기타 의견에서 언급했듯이 node.js는 적절한 시나리오 여야합니다. 실제로 사람들이 node.js를 사용하는 가장 흔한 시나리오 중 하나입니다. (아마도 여러 개의) 소스로부터 데이터를 가져오고, 작은 양의 CPU 빛 처리를 수행하고 응답을 보내거나 결과를 저장합니다. 메시지 필터링이 CPU 비용이 많이 드는 경우를 제외하고는 node.js 구현이 J2EE 버전보다 성능이 우수합니다.

왜냐하면 Node.js는 서버가 대기하는 데 대부분의 시간을 소비하는 솔루션에 많이 최적화되어 있기 때문입니다. 클라이언트 연결 대기, 데이터베이스 응답 대기, 디스크 읽기/쓰기 대기, 클라이언트가 응답을 기다리는 중임 등이 있습니다. 이 경우에는 차선책이다. 대부분의 쓰레드는 기다리고 있기 때문에 많은 코드를 병렬로 실행하는 이점을 얻지는 못하지만 컨텍스트 스위칭과 더 높은 메모리 사용의 가격을 지불해야합니다.

node.js를 사용하기 전에 고려해야 할 것이 하나 있습니다. node.js를 프로덕션 환경에 배포 할 수 있습니까? 새로운 플랫폼으로 이동하면 관련 비용이 발생하므로 애플리케이션을 운영하는 사람들은 node.js 애플리케이션을 다루는 방법을 배워야합니다.

+0

>'node.js 구현은 아마도 Java EE 버전보다 성능이 우수 할 것입니다. '- 이것을 지원할 데이터가 있습니까? 이 벤치 마크는 예를 들어 어설 션을 정확히 지원하지 않습니다. http://www.techempower.com/benchmarks/#section=data-r5 –

+0

>'Java EE는 멀티 스레딩을 채용하고 있습니다. 여기서 각 요청을 처리 할 하나의 스레드가 있습니다 '- 이것은 하나의 옵션입니다. Java EE는 비동기 HTTP 처리도 지원합니다. 예 : http://www.javakeexample.com/2013/01/creating-asynchronous-servlets-with.html 및 https://blogs.oracle.com/enterprisetechtips/entry/asynchronous_support_in_servlet_3 –

+0

@ArjanTijms 좋은 지적. 나는 성능에 대한 나의 주장을 뒷받침 할 하드 데이터가 없다. 그러나 당신이 언급 한 벤치 마크는 결함이 있으며 성능 문제가 알려진 mysql 클라이언트를 사용합니다. 비동기 J2EE - 비동기 서블릿에 대해서는 아마도 충분하지 않습니다. 비동기를 사용하여 DB와 통신해야합니다. J2EE 구성 요소의 일반적인 용도는 아닙니다. –