2009-10-14 6 views
2

하나의 서버 (Java에서 개발 됨)와 하나 이상의 원격 GUI 클라이언트 (Windows가있는 Swing 응용 프로그램)로 구성된 분산 응용 프로그램을 설계해야합니다.서버 클라이언트 Java 분산 응용 프로그램

앞서 언급 한 것처럼 클라이언트는 데이터를주고 받기 위해 서버에 연결할 수있는 스윙 GUI 응용 프로그램입니다. 통신이 양방향 (서버 < => 클라이언트)입니다. 네트워크를 통해 전송 된 데이터는 주로 내 도메인 논리 개체로 구성됩니다.

간단한 두 가지 예 : 클라이언트가 창 안의 테이블을 채우기 위해 데이터를 받기 위해 서버를 호출합니다. 서버는 버튼과 같은 특정 위젯을 새로 고치기 위해 데이터를 보내기 위해 클라이언트를 호출합니다.

서버와 클라이언트간에 전송되는 데이터의 양과 네트워크 호출의 빈도는 특별히 높지 않습니다.

서버 - 클라이언트 통신에 어떤 기술을 제안합니까?

나는 한 가지 기술을 마음에 듭니다. 그러나 나는 당신의 의견을 알고 싶습니다.

고마워요.

답변

5

Java 클라이언트와 Java 서버간에 통신하는 경우 RMI가 가장 적합합니다. 그러나 클라이언트 기술을 웹 인터페이스로 바꾸려면 어려움을 겪을 수 있습니다.

+0

답변 해 주셔서 감사합니다. 사실 내가 생각한 기술은 RMI입니다. 앞으로 클라이언트가 웹 인터페이스에서 변경 될 것이라고 생각하지 않습니다 (스윙 기술로 충분할 것입니다). 이제는 RMI를 채택하는 데있어 다른 단점이있을 수 있다고 생각하십니까? – epok

+0

솔직히 말해서, 오랫동안 RMI를 사용하지 않았습니다. "긴"2 년의 의미. 제가 지금 많이 사용하고있는 것은 아파치 CXF와 SOAP입니다 - 거대한 Object 그래프를 보내고있는 경우에는 최선의 선택이 아닐 수도 있습니다. RMI를 사용하여 작업 한 것들은 꽤 잘 돌아갔다. (필자는 PDA와 워크 스테이션간에 데이터를 동기화하는 데 사용했다.) – msparer

+0

사실 서버 - 클라이언트 통신을 위해 네트워크를 통해 전송되는 데이터는 도메인 개체로 구성됩니다. 때로는 이러한 객체는 "단순"(예 : 두 개의 정수와 문자열이있는 객체 하나) 또는 "복합"(서버에서 클라이언트로 전송 한 많은 객체 목록) 일 수 있습니다. 분명히 이러한 개체의 구현은 서버와 클라이언트에서 볼 수 있습니다. – epok

0

저는 소켓이 트릭을해야한다고 생각합니다. 유연하고 특히 코드 작성/유지 관리가 어렵지 않습니다. 대부분의 엔트리 레벨 프로그래머는이를 유지 보수 할 수 있어야합니다. 그들은 또한 빠르고 모든 종류의 환경에 적응합니다.

서버가 오프 사이트 상태이거나 방화벽 문제가 발생할 것으로 예상되는 경우가 아니면. 이 경우 웹 서비스는 기본 통신이 포트 80을 통해 발생하기 때문에 진행됩니다.

+0

답변 해 주셔서 감사합니다. 소켓도 네트워크 통신을위한 쉬운 방법이라고 생각합니다. 하지만 도메인 객체를 소켓에 쓰고 읽으려면 어떻게해야할까요? 그것은 무시할 수 있습니까? "오프 사이트"란 무엇을 의미합니까? 저는 서버가 전용 LAN에 설치되어 있으며 Swing 응용 프로그램이 설치된 모든 원격 호스트에서 액세스 할 수 있다고 생각합니다 (소프트웨어 인증/로그인 필요). – epok

+0

도메인 개체를 보내려는 경우 RMI가 더 좋은 옵션이라는 데 동의합니다. 내 첫 번째 생각은 결코 RMI가 아니라는 것을 인정해야하지만 Java 클라이언트와 서버를 사용하는 것이 더 나은 선택 일 수 있습니다. 오프 사이트로 인해 고객이 네트워크에있는 동안 서버가 인터넷 어딘가에 있음을 의미했습니다. 그럴 것 같지 않은 것 같습니다. – Tanmay

+0

귀하의 의견을 보내 주셔서 감사합니다. 아마도 (msparer와 당신이 제안한대로) 저는 서버 - 클라이언트 통신을 위해 RMI를 채택 할 것입니다. – epok

0

msparer가 RMI를 제안했지만, RMI를 통신 프로토콜로 사용하는 EJB3 만 사용한다는 점만 제외하면 두 번째 msparer가 RMI를 제안합니다. EJB3는 매우 쉽습니다. EJB가 제공하는 다른 기능 (예 : 보안)을 사용하지 않더라도 CMT (Container Managed Transactions)를 계속 활용할 수 있습니다. 실제로 개발이 쉬워졌습니다.

server-> client 통신에 대해서는 JMS를 사용하는 것이 좋습니다. 다시, EJB3를 사용하면 주석을 사용하는 것이 훨씬 쉽습니다. 클라이언트는 메시지 서비스에 가입하고 서버로부터 업데이트 알림을받습니다.

예, 현재이 작업을 수행하는 응용 프로그램을 작성 중입니다. 불행히도 EJB2.1을 사용하고 있습니다. 여전히 이것이 EJB가 실제로 빛나는 곳이라고 생각합니다. 웹 애플리케이션에서 EJB를 사용하는 것은 종종 과잉이지만, 분산 클라이언트/서버 애플리케이션에서는 매우 잘 작동합니다.

2

RMI와 함께 하겠지만 Spring 프레임 워크를 사용하여 전체 아키텍처를 구현합니다. 이 방법은 사용 된 기술과 독립적이며 거의 코딩없이 다른 통신 방법 (예 : HTTP 또는 기타)으로 전환 할 수 있습니다.

업데이트 : Spring에서는 RMI 관련 코드를 전혀 사용할 수 없습니다.

관련 문제