2013-10-22 2 views
2

TCP/IP를 사용하여 Java에서 다중 클라이언트/서버 응용 프로그램을 개발 중입니다. 내 서버는 각 clientSocket (clientSocket = serverSocket.accept();)에 대해 새 스레드를 만듭니다. 문제는 실행중인 모든 스레드가 서로에 대해 알 수있는 방법 (즉, 채팅중인 모든 온라인 사용자에게 메시지를 브로드 캐스트하는 방법)을 파악하는 것 같습니다. 내 스레드가 새 사용자가 서버에 연결할 때뿐만 아니라 사용자가 서버와 연결을 끊을 때를 알 수있는 효율적인 방법은 무엇입니까?멀티 스레드 서버 (TCP/IP)를 사용하는 클라이언트/서버 chatroom

+0

당신은 각 연결에 대한 스레드를 startig되고는 efficent되고 싶어? 피크에 앱을 사용하고 싶은 분은 몇 점입니까? –

+0

정말 대학 교과 과정이기 때문에 10-15 시까 지 말씀 드리고자합니다. 그런데 각 연결마다 새 스레드를 시작하는 것이 효율적이지 않은 것은 무엇입니까? – user2000920

+0

내 게시물이 도움이 되었습니까? :) –

답변

0

사용자 위치에있는 사용자는 소켓 스레드 및 메시지 큐에 대한 참조가있는 추가 큐 스레드를 만듭니다. 모든 소켓 스레드는 대기열 스레드에 메시지를 대기열에 넣을 수 있습니다. 그러면 대기열 스레드는 모든 소켓 스레드에 메시지를 보냅니다 (따라서 소켓 스레드는 대기열에 대한 참조가 필요합니다).

ArryList를 기대해야합니까? 소켓 스레드의 변경이 반복기를 사용하여 반복해야합니다.

는 의견에 귀하의 질문에 대답하려면 : 성능

연결 당 스레드가 강렬한 매우 자원 (10.000 연결을 상상)입니다 시작. 그래서 그것을 처리 할 다른 방법이 있습니다.

아파치 MINA는 사용자가 쉽게 높은 성능과 높은 확장 성 네트워크 응용 프로그램을 개발하는 데 도움이되는 네트워크 응용 프로그램 프레임 워크 : ThreadPoolExecutor

  • http://mina.apache.org
  • 내가의 definetly 미나와 함께 갈 것

    • . Java NIO를 통해 TCP/IP 및 UDP/IP와 같은 다양한 전송을 통해 추상 이벤트 구동 비동기 API를 제공합니다.

    MINA 용 그물에 대한 많은 자습서가 있습니다.

    어쩌면 조금 지나친 것입니다.하지만 관심이 있다면 가치가 있습니다.

    [편집]

    의 단지 10-15 클라이언트가 연결 당 스레드를 사용하는 것이 괜찮을 경우

    ...

    관련 문제