본문 바로가기

공부/컴퓨터

서버를 만들때 주의해야 할점 - 메세지 보내기전 클라이언트 확인하기

서버에서 클라이언트로 메세지를 보내기 전에 먼저
접속이 현재 제대로 이루어져 있는지 확인해 보아야 한다.


/**
   * 메세지를 모든 다른 클라이언트에게 보낸다.
   */

private void broadcast(Client fom, String message) {
    // 연결이 끊겨진 클라이언트들을 잠시 저장하기 위해 사용
    Vector zombies = new Vector(5);

    Enumeration enum = clients.elements();
    while ( enum.hasMoreElements() ) {
        // 클라이언트 객체가 발송자인 경우 무시
        if (client == from) {
            continue;
        }

        if (client.socket == null) {
            zombies.addElement(client);
            continue;
        }
       client.sendMessage(message);
    }

    enum = zombies.elements();
    while ( enum.hasMoreElements() ) {
        Client client  = (Client) enum.nextElement();
        clients.removeElement(client);
    }
}


메세지를 보낼때 문제가 생기면 try catch 부문에서 잡을 수도 있을것 같다.
하지만 어느게 성능이 더 좋은지 잘 모르겠다.

현재 있는 것은 다음과 같이 움직인다.
1. 살아 있나?
2. 살아 있으면 메세지 보냄
3. 죽어 있으면 Enumeration 에 저장
4. 메세지 전부 보낸후 각 Client 삭제 처리

하지만 메세지를 보낼때 문제가 생긴다면 다음과 같을것이다.
1. 메세지 보냄
2. 죽어 있으면
3. 죽어 있는 클라이언트 삭제
4. 살아 있으면 메세지 보냄.

첫번째것은 각 메세지를 보낼때마다 Enumeration 를 생성하는 로드.
두번째것은 죽은 클라이언트들에게 보내는 메세지 로드와 예외 처리 부분의 로드.


아직은 실력이 없어서 확인을 못 해 본다.