[Stomp] FrontEnd 구현

ss0510s·2024년 5월 23일
0

WebSocket

목록 보기
4/5

[Stomp] FrontEnd 구현

설치

npm i @stomp/stompjs
npm install sockjs-client

연결

const chatPrivateConnect = () => {
        const serverURL = `서버URL/endpoint`;
    
        let socket = new SockJS({serverURL}); // SockJS를 사용하여 WebSocket 연결을 설정
				// WebSocket 클라이언트를 생성
        let client = new Client({ 
						// jwt 인증 위해 token 필요
            connectHeaders: {
                Authorization: `Bearer ${accessToken}`,
            },
						// WebSocket 연결을 만들기 위한 함수를 지정
            webSocketFactory: () => socket });

        client.onConnect = () => { // 연결이 성공하면 수행할 작업
            console.log("연결 성공")
						
						// client 구독
            client.subscribe(`/sub/${personalChatId}`, 
						// 구독이 성공하고 채널로부터 메시지를 수신했을 때 실행될 콜백 함수를 정의
            (res) => {
								// 받은 메시지를 이전에 받은 메시지 리스트에 추가, JSON 형식으로 파싱하여 배열에 추가
                setRecvList(prevRecvList => [...prevRecvList, JSON.parse(res.body)]);
            });
        };

        client.activate(); // 클라이언트 활성화하여 연결 시작

        // WebSocket 연결 중에 오류가 발생하면 실행할 콜백 함수를 정의
				// 콘솔에 오류를 출력하고, 일정 시간 후에 다시 연결을 시도
        client.onStompError = (frame) => {
            console.error('WebSocket 연결 오류:', frame);
            setTimeout(client.activate(), 5000); //
        };
				// WebSocket 클라이언트 객체를 상태로 설정
        setStompClient(client);
    }

전송

const send = (stompClient, sender,message, personalChatId) => {
    if (stompClient && stompClient.connected) { // 연결이 유지될때만 실행
        let msg = {
            sender: sender,
            text: message,
            personalChatId: personalChatId
        };
				// 구성된 메시지를 목적지(destination)로 발행
        stompClient.publish({
            destination: "/pub/api/chat/send/" + personalChatId,
            body: JSON.stringify(msg)
        });

    } else {
        alert("서버 오류로 인해 메시지 전송이 실패하였습니다!");
    }
};
profile
개발자가 되기 위해 성장하는 중입니다.

0개의 댓글