메시지 브릿지 1.4.0 기능 패치 > 메시지 브릿지

본문 바로가기

사이트 내 전체검색

뒤로가기 메시지 브릿지


공지 메시지 브릿지 1.4.0 기능 패치

본문

클라이언트 개발자님께 힘이 되고자 다음의 기능을 추가했습니다. 감사합니다.


1) 유령 처리 방식 개선 (삼세판 적용)


Ping 실패 1번 = 무시

3번 연속 실패할 때만 유령(끊긴 사용자)로 판단해 제거

→ 정상적인 모바일 백그라운드/일시적인 끊김은 절대 문제 없음.


2) 자동 재접속 안정화


클라이언트에서 연결 끊기면 0.5초 간격으로 자동 재접속

서버는 동일 사용자가 다시 들어오면 기존 유령 세션 자동 정리

→ 중복 접속 표시 사라지고 부드러운 재접속 가능.


3) 유령 세션 자동 청소기 강화


닫힌 소켓, 응답 없는 소켓, ping 3회 실패한 소켓 자동 삭제

→ 접속자 수가 실제와 다르게 올라가는 문제를 해결.


4) 원본 구조 유지 + 안정성만 보강


기존 handler / broadcast / log 시스템 그대로 유지

메인은 그대로, 추가된 건 ‘유령 정리 정확도’와 ‘재접속 안정성’ 뿐


5) 모바일 친화도 크게 향상


화면 꺼짐 / 앱 전환 / 네트워크 전환 시 끊긴 것으로 처리 안 함

돌아오면 그대로 재접속 가능


적용된 기능의 클라이언트 최적화 소스

<script>
/* -------------------------------------------
   설정
 ------------------------------------------- */
const WS_URL = "wss://designonex.com:14147?group=mygroup";
let userInfo = {
    user: "UserA",      // 재접속 시 다시 보냄
    role: "viewer"
};

/* -------------------------------------------
   WebSocket 관리 변수
 ------------------------------------------- */
let ws = null;
let reconnectTimer = null;
let retryDelay = 1000;  // 재접속 시작 딜레이
const maxDelay = 10000; // 최대 10초

/* -------------------------------------------
   WebSocket 연결 함수
 ------------------------------------------- */
function connectWS() {
    console.log("%c[WS] Connecting...", "color: cyan");

    ws = new WebSocket(WS_URL);

    ws.onopen = function() {
        console.log("%c[WS] Connected", "color: lime");

        // 재접속 딜레이 초기화
        retryDelay = 1000;

        // 재접속 시 반드시 다시 이름/상태 보내기
        ws.send(JSON.stringify({
            type: "join",
            ...userInfo
        }));
    };

    ws.onmessage = function(e) {
        try {
            const msg = JSON.parse(e.data);
            console.log("[WS] Recv:", msg);

            // 필요 시 메시지 처리 추가
        } catch (err) {
            console.error("[WS] JSON Error:", err);
        }
    };

    ws.onerror = function(e) {
        console.warn("%c[WS] ERROR", "color: red");
    };

    ws.onclose = function(e) {
        console.warn("%c[WS] CLOSED", "color: orange");
        scheduleReconnect();
    };
}

/* -------------------------------------------
   자동 재접속 스케줄링
 ------------------------------------------- */
function scheduleReconnect() {
    if (reconnectTimer) return;

    console.log(
        `%c[WS] Reconnecting in ${retryDelay / 1000}s`,
        "color: yellow"
    );

    reconnectTimer = setTimeout(() => {
        reconnectTimer = null;

        // 딜레이 증가 (최대 10초)
        retryDelay = Math.min(maxDelay, retryDelay + 1000);

        connectWS();
    }, retryDelay);
}

/* -------------------------------------------
   네트워크 꺼졌다 켜질 때 즉시 재접속
 ------------------------------------------- */
window.addEventListener("online", () => {
    console.log("%c[WS] ONLINE → immediate reconnect", "color: #4FC3F7");
    if (!ws || ws.readyState !== WebSocket.OPEN) {
        retryDelay = 1000;
        connectWS();
    }
});

/* -------------------------------------------
   모바일 백그라운드 복귀 시 재접속
 ------------------------------------------- */
document.addEventListener("visibilitychange", () => {
    if (document.visibilityState === "visible") {
        console.log("%c[WS] TAB ACTIVE", "color: #FFD740");

        if (!ws || ws.readyState !== WebSocket.OPEN) {
            connectWS();
        }
    }
});

/* -------------------------------------------
   수동 메시지 전송 함수 (필요 시 UI에 연결)
 ------------------------------------------- */
function sendMessage(type, data = {}) {
    if (ws && ws.readyState === WebSocket.OPEN) {
        ws.send(JSON.stringify({ type, ...data }));
    } else {
        console.warn("WS not connected – message dropped:", type);
    }
}

/* -------------------------------------------
   최초 실행
 ------------------------------------------- */
connectWS();
</script>


* 이 소스는 직접 개발을 진행하시는 개발자에게 도움이 되는 소스입니다.

* 디자인원엑스에서는 웹 엔진 소스를 가공해서 제공합니다. 매뉴얼을 참고해주세요.

댓글목록 0

등록된 댓글이 없습니다.

전체 19건 1 페이지
게시물 검색


Copyright © 소유하신 도메인. All rights reserved.

사이트 정보

회사명 : 회사명 / 대표 : 대표자명
주소 : OO도 OO시 OO구 OO동 123-45
사업자 등록번호 : 123-45-67890
전화 : 02-123-4567 팩스 : 02-123-4568
통신판매업신고번호 : 제 OO구 - 123호
개인정보관리책임자 : 정보책임자명

PC 버전으로 보기