저는 두 개의 webrick 서버를 시작하는 두 개의 프로세스를 포크해야하는 보석을 작성하고 있습니다. 기본 클래스의 클래스 메소드를 통해이 서버를 시작하려고합니다. 여러 개의 서버가 아닌이 두 개의 서버 만 실행해야하기 때문입니다. 런타임 중에이 두 서버에서 변수를 변경하기 위해 일부 메소드를 호출하려고합니다.루비 프로세스를 통해 변수 공유
내 문제는 기본 클래스의 클래스 메서드를 통해 포크의 인스턴스 변수에 액세스 할 수 없다는 것입니다. 또한 기본 클래스 내에서는 스레드를 사용할 수 없습니다. 왜냐하면 후드에서 스레드 안전하지 않은 다른 라이브러리를 사용하고 있기 때문입니다. 그래서 각 서버를 자신의 프로세스로 분기해야합니다.
@@server
과 같은 클래스 변수를 사용해 보았습니다. 그러나 기본 클래스를 통해이 변수에 액세스하려고하면 nil
이됩니다. 나는 루비에서 포크 중 클래스 변수를 공유하는 것이 불가능하다는 것을 읽었다. 맞습니까?
그래서이 문제를 해결하는 다른 방법이 있습니까? 싱글 톤을 사용하는 것을 생각했지만 이것이 최선의 아이디어인지 확실하지 않습니다.
[프로세스 간 통신 (http://en.wikipedia.org/wiki/Inter-process_communication가) –
그냥 링크가 조금 덜입니다, 내가 프로세스 간 통신을 알고)하지만 할 정말 XML 인터페이스를 구현하거나 시스템 고유의 프로토콜을 처리해야합니다. Ruby 프로세스가 분리되어 있기 때문에 IPC는 (최상위 레벨에서) 문제를 해결할 수있는 유일한 방법입니다. – 23tux
@ 23tux : 루비 프로세스는 별도입니다. 루비 보석이 많이 있습니다. 아마도 데이터를 디스크에 '마샬링'할 수 있습니다. 추가 할 필요가있는 부분은 잠금 (부분 읽기/쓰기를 방지하기 위해) 뿐이며 성능에 유의하십시오. 다음은 디스크를 만지지 않도록 로컬'memcached '에 마샬링 할 수 있습니다. . . –