긍정의힘!
50
2020-11-23 17:41:02
1
554

혹시 java + websocket (spring 사용 X) 개발 해보신분 계신가요?


안녕하세요.

혹시 java + websocket (spring 사용 X) 개발 해보신분 계신가요?

프로젝트 마무리 이상한 현상이 발생하여 문의 드립니다.


현재 모든 부분 정상적으로 잘 되다가

간헐적 하루 1번 이상 메세지를 못받는 경우가 발생합니다.

메세지를 못받으면서 그대로 먹통이되버립니다. (소켓 접속은 유지)


정상적일때의 로그 (3명접속시)

2020-11-23 10:30:31 >>> Common > 메세지 시작

2020-11-23 10:30:31 >>> Common > 메세지 완료


2020-11-23 10:30:31 >>> Common > 메세지 시작

2020-11-23 10:30:31 >>> Common > 메세지 완료


2020-11-23 10:30:31 >>> Common > 메세지 시작

2020-11-23 10:30:31 >>> Common > 메세지 완료



이상현상이 생길때 로그 (3명접속시)

2020-11-23 10:30:31 >>> Common > 메세지 시작

2020-11-23 10:30:31 >>> Common > 메세지 완료


2020-11-23 10:30:31 >>> Common > 메세지 시작

.....여기서 멈춰있음


이후에 재접속을 시도하면 응답 안옵니다.

톰캣 리스타트 해야만 다시 접속이 되는데요.


의심가는 부분은 멈춤현상이 발생하는 지점인

sessObj.getBasicRemote().sendText(jsonMessage);

부분 같은데 전혀 감이 안옵니다.


혹시 이러한 현상 경험하신분 계시면 경험담 부탁드립니다.




protected void independentAllMessageOnlyShow(String jsonMessage) throws ClassNotFoundException, SQLException {

		

    SocketSession2 peers = new SocketSession2();

    Map<String, Session> peersMap = peers.getPeers();

    Iterator<String> keys = peersMap.keySet().iterator();

    while( keys.hasNext() ){

        String key = keys.next();

        Session sessObj = peersMap.get(key);



        synchronized(sessObj) {

            if(sessObj.isOpen()) {

                try {

                    dd(nowDate()+" >>> Common > 메세지 시작");

                    sessObj.getBasicRemote().sendText(jsonMessage);

                    dd(nowDate()+" >>> Common > 메세지 완료");

                } catch (IOException e) {

                    e.printStackTrace();

                }

            }

        }

    }

    peers = null;

}


접속자 소켓 저장은 아래와 같이 했습니다.

static Map<String, Session> map = new HashMap<>();

static Map<String, Session> peers = Collections.synchronizedMap(map);

0
  • 댓글 1

  • enoeht
    2k
    2020-11-23 19:24:52

    구조적으로 동일한 소켓 접속을 몇일이상 유지하는건 좀 불안해 보이네요.

    필요할때만 접속했다가 접속을 끊고 재접속하는 방식으로 바꾸시는걸 추천드립니다.

  • 로그인을 하시면 댓글을 등록할 수 있습니다.