Google Groups no longer supports new Usenet posts or subscriptions. Historical content remains viewable.
Dismiss

[질문] 자바에서 IPC사용방법......

2,046 views
Skip to first unread message

Chang wook Lee

unread,
Dec 23, 1997, 3:00:00 AM12/23/97
to
자바에서 Pipe, socket말고 서로 다른 프로세스간에통신하는
방법이 있습니까? 예를들어 C에서는 Sharedmemory등과
비슷한거....... 아니면 다른 라이브러리를 사용해야 한다면
그거라고 알려주시면 좋겠습니다.


vcard.vcf

Kim jinsook

unread,
Dec 23, 1997, 3:00:00 AM12/23/97
to le...@disc.co.kr

Socket 말고 다른 프로세스간 통신할때.. RMI 를 이용하는 방법이 있을 것 같군요.
그리고 sharedmemory와 비슷한 거라면..
Thread를 이용하면 될 듯.


Chang wook Lee wrote:

> ------------------------------------------------------------------------
>
> Chang wook Lee <le...@disc.co.kr>
> SS Dept.
> Daewoo Information System Co.
>
> Chang wook Lee
> SS Dept. <le...@disc.co.kr>
> Daewoo Information System Co.
> 12F, Daewoo Jaedan B/D Work: +82+2-316-2891
> 5 ga namdaemunro joonggu Fax: +82+2-774-7177
> Seoul Home: +82+2-212-7839
> Kyoungkido Netscape Conference Address
> 100-095 Netscape Conference DLS Server
> Korea
> Additional Information:
> Last Name Lee
> First Name Chang wook
> Version 2.1


Kim Do-Hyung

unread,
Dec 23, 1997, 3:00:00 AM12/23/97
to

Kim jinsook <ix...@david.bit.co.kr> wrote:
: Socket 말고 다른 프로세스간 통신할때.. RMI 를 이용하는 방법이 있을 것 같군요.

: 그리고 sharedmemory와 비슷한 거라면..
: Thread를 이용하면 될 듯.

RMI는 내부적으로 socket을 사용합니다. 상대적으로 간단한
통신이 필요하다면 socket을 사용하는 편이 효율적이고 간편합니다.
그리고, 쓰레드의 경우는 프로세스 경계를 넘을 수가 없으므로
원래 질문하신 분의 의도에는 맞지 않을 것으로 생각합니다.

: Chang wook Lee wrote:

: > 자바에서 Pipe, socket말고 서로 다른 프로세스간에통신하는
: > 방법이 있습니까? 예를들어 C에서는 Sharedmemory등과
: > 비슷한거....... 아니면 다른 라이브러리를 사용해야 한다면
: > 그거라고 알려주시면 좋겠습니다.

우선, 참고로 자바의 pipe는 프로세스 경계를 넘지 못함을 알려
드립니다. 이름은 유닉스의 pipe와 유사성이 있지만, 실상은
단순히 두개의 스트림 객체를 이어주는 것 뿐입니다.

자바 자체가 하나의 JVM에 여러개의 프로그램이 수행되는 것을
염두에 두었고, JVM은 프로세스의 개념이 없는 JavaOS나
embedded system 등에서 수행될 수 있으므로 현재로서는
사실상 한 컴퓨터 내에서 프로세스간의 통신을 지원하는
수단은 특별히 지원되지는 않고 있습니다. 다만 앞서 지적하신
것과 같이 socket을 사용하는 방법이 현재로서는 가장 자연스러운
방법이라고 볼 수 있을 겁니다.

어떤 상황이냐에 따라 가능한 해결책을 열거해 봤습니다.
단, 서로 통신하고자 하는 프로그램들은 한 컴퓨터 안에
있다고 가정합니다:

1. 두개이상의 자바 프로그램(application이나 applet)이
서로 통신해야 할 경우

둘 이상의 application이나 applet은 특별한 경우를 제외하고는
동시에 하나의 JVM안에서 수행될 수 있습니다. 흔히 JDK의
java 명령이 단 하나의 application만을 수행하는 형식으로 되어
있다는 사실 때문에 불가능한 것으로 생각하는 경우가 많은 듯
합니다. 하지만, 조금만 발상을 전환하면 가능하며, 결과적으로
한 VM안에서 자연스럽게 객체들을 공유할 수 있습니다.
쓰레드를 두개 이상 만들어서 각 쓰레드가 해당하는 프로그램들의
main 메쏘드를 호출하도록 프로그램을 작성하면 됩니다.

2. 한쪽이 C 등으로 작성된 프로그램인 경우

Socket을 쓰시는 편이 가장 간편합니다. 굳이 Socket을
피하셔야 하는 경우는 native method를 사용하는 수밖에는
없습니다. Native method 안에서 OS 차원에서 제공하는
shared memory 등의 IPC를 이용하여 다른 프로그램과 정보를
교환하고 다시 그 결과를 자바 쪽으로 전달하면
됩니다. 단, 이 경우는 100% 자바로 작성될 수 없다는
단점이 있습니다.

너무 당연한 대답을 좀 장황하게 쓰게 되었습니다만,
조금이나마 도움이 되셨기를 바랍니다.


0 new messages