2011-03-19 4 views
0

스레드 된 TCP 클라이언트를 Java로 작성해야하지만이를 구조화하는 방법을 잘 모릅니다. 주 스레드를 차단하지 않도록 다른 스레드에서 클라이언트를 실행하고 싶습니다.Java에서 스레드 된 TCP 클라이언트를 구성하는 방법

이상하게도 주 스레드에서 클라이언트를 만든 다음 클라이언트에 서버에 연결하도록 지시합니다. 몇 시간이 걸리는 연결은 다른 스레드에서 발생합니다. 클라이언트가 연결되면 주 스레드에 알리고 서버에서 들어오는 메시지를 수신하기 시작합니다. 메시지가 수신되면 주 스레드에 통지됩니다.

내 계획은 TCP 클라이언트 클래스가 Runnable을 구현하고 실행 방법에서 연결과 수신을 모두 수행하는 것입니다.

TCP 클라이언트를 구조화하는 방법에 대한 의견을 보내 주시면 감사하겠습니다.

+0

질문 1. GUI 응용 프로그램인가, 명령 줄 응용 프로그램인가 또는 예. 더 큰 시스템의 비 반복적 부분? – KarolDepka

+0

질문 2. "주 스레드에게 알린다"는 것은 무엇을 의미합니까? – KarolDepka

+0

질문 3. 어떤 종류의 프로토콜인지 더 자세히 설명해 주실 수 있습니까? 그리고 그 메시지가 어떻게 앞뒤로 움직일 것인가? – KarolDepka

답변

1

응용 프로그램을 구조화하는 동안 고려해야 할 사항은 다음과 같습니다.
1. 이상적으로 네트워크 스트림을 읽고 쓰는 데 별도의 스레드가 있어야합니다. 그렇지 않으면 문제가있을 수 있습니다.
2. 다른 스레드에 대해 다른 스레드에게 "알리"거나 무언가를 전달하려면 Java "조건"관용구/개체 및/또는 차단 대기열/대기열을 고려하십시오.

+0

나는 java.util.concurrent.LinkedBlockingDeque를 사용하여 네트워크를 통해 전송 될 것을 대기열에 둡니다. – KarolDepka

+0

당신을 도울 수있는 것 : 당신의 시스템의 "상태 머신"(일종의 http://en.wikipedia.org/wiki/Finite_state_machine) 스케치. – KarolDepka

+0

다소 도움이된다면 답을 upvote하십시오 (위쪽 화살표). 감사. – KarolDepka

0

JBoss Netty을보고 스레드 간의 통신을 사용자의 필요에 맞는 Queue 구현으로 처리하십시오.

Netty는 조정 학습 곡선이 있지만 쉬운 유지 보수가 가능한 디자인으로 오래 사용하고 UDP 전송이 필요하지 않은 경우 (그때는 Apache Mina을 보겠습니다) 충분합니다. 또한 Netty로 상태 시스템을 구현할 필요가 없습니다.

관련 문제