2012-08-27 3 views
2

rubygem Spork과 같은 줄에 따라 노드 프로세스를 포크하여 기본적으로 현재 환경의 완전한 복제본으로 만들 수 있습니까?다른 프로세스간에 Node.js 환경을 공유 하시겠습니까?

"완전한 복제본"이것은 복제 된/자식 환경/프로세스가 기존 require.cache을 재사용 할 수 있음을 의미합니다. 따라서 하위 프로세스는 동일한 모듈을 다시 필요로하는 성능 상실을 겪을 필요가 없습니다. 예를 들어, require('lib-a')을로드하는 데 2 ​​초가 걸립니다. 자식 프로세스에서 require('lib-a')으로 전화 할 때 어떻게 만들 수 있습니까? 즉, require.cache 또는 비슷한 것을 사용하는 인스턴트입니까?

노드 유무선 연결 HTTP 서버의 시작 시간을 높이는 데 사용 사례가 있습니다. 더 복잡한 앱에서는 require 많은 양의 모듈이 앞면에 있습니다. 때로는 1,2,까지 모두 걸릴 수 있습니다. 모듈을 게으른로드하는 방법에 대한 정보는 찾고 있지 않지만 최적화도하고 있습니다. 그것의 한계). 나는 그것이 Marshal.dump(yield, @child_io)Marshal.load(@child_io)과 같은 코드로 일을 정확히 모르겠어요

https://github.com/sporkrb/spork/blob/master/lib/spork/forker.rb

하지만 어떻게 든 자식 프로세스로 전체 환경을 복사하는 것처럼 보인다 :

관련 Spork 코드는 이것이다 . 그렇게함으로써, Spork은 1 "메인"레일즈 서버를 실행할 수있게 만들었고 테스트를 실행하기 위해 "포크"하기 때문에 Rails 서버를 부팅 할 때까지 기다리지 않아도됩니다 (때로는 10 초). 노드에서 어떻게 할 수 있습니까? 가능한가?

업데이트

이는 unix socket pair 간주되어 있습니까? 이것은 수색에 도움이 될 것입니다.

답변

1

노드 프로세스는 수명이 긴 것으로 간주되므로 시작 시간이 특별히 우선 순위가 있다고 생각하지 않습니다. 이것은 노드 철학의 핵심입니다. 즉, cluster module을 살펴볼 수 있습니다. 하위 작업자 프로세스를 시작할 수 있습니다. 이것은 주로 멀티 코어 시나리오에서의로드 밸런싱을 위해 설계되었지만 약간의 도움이 될 수 있습니다.

관련 문제