2012-03-09 2 views
1

소켓을 통해 서버에 연결할 클라이언트가 있습니다. 연결 후 서버에서 발생하는 모든 이벤트는 등록 된 모든 클라이언트로 전송됩니다.Java 소켓 이벤트 구동

모든 클라이언트는 이벤트와 관련된 데이터를 수신해야합니다.

클라이언트를 구현하기 만하면 ... 서버에 연결하여 이벤트 데이터를 수신해야합니다.

나는 같은 일을 생각하고 있었다 :

this.socket = new Socket(InetAddress.getByName(host), 
this.socket.connect(socket.getLocalSocketAddress(), SOCKET_TIMEOUT); 

을 그리고 while 루프에서 소켓의 InputStream를 얻을 스레드를 실행합니다.

그러나 이것이 소켓을 통해 이벤트 구동 클라이언트를 구현하는 가장 좋은 방법인지는 잘 모릅니다.

?

답변

0

이것은 종종 스트림에서 read() 호출을 지속적으로 차단하는 클라이언트 용 별도의 스레드를 생성하여 수행됩니다. 즉, 데이터가 사용 가능 해지 자 마자 read() 호출이 차단 해제되고 어떤 작업을 수행 할 수 있습니다 ('이벤트 발생'), 다음 이벤트를 기다리는 블로킹으로 돌아갑니다.

2

이벤트 기반 환경에서 Datagram Socket은 네트워크 오버 헤드가 낮지 만 안정성은 떨어집니다. 다음은 데이터 그램 소켓 클라이언트 및 서버 작성에 관한 tutorial입니다.

0

클라이언트가 GUI 이벤트와 같은 다른 입력에 응답해야하는 경우가 아니면 반드시 여기에 스레드가 필요하지는 않습니다.

그런 다음 TCP에 대해 말하면 루프에서 소켓을 읽고 전체 응용 프로그램 "이벤트"가있을 때까지받은 데이터를 버퍼링하고 응용 프로그램 "이벤트 처리기"를 호출하십시오. 그것은 간단합니다.

+0

스레드를 생성하지 않으면 응용 프로그램이 차단됩니다. 맞습니까? 나는 끊임없이 블로킹 동작 인 소켓을 읽을 필요가 있거나 틀린가? 응답을위한 Thx –

+2

예, 소켓 읽기를 차단합니다. 그게 네가 원하는거야? Java의 논 블로킹 IO 프레임 포크도 있습니다. http://en.wikipedia.org/wiki/New_I/O에서 확인하십시오. –

관련 문제