• 카테고리

    질문 & 답변
  • 세부 분야

    프론트엔드

  • 해결 여부

    미해결

WebSocket 연결 에러 질문

23.11.01 18:18 작성 조회수 215

0

import { useCallback } from 'react';
import io from 'socket.io-client';

// 아무 key값이 들어올수 있으니 이런 형식으로 타입 지정
const sockets: {[key: string]: SocketIOClient.Socket} = {};

const backUrl = "http://localhost:3095";

const useSocket = (workspace?: string): [SocketIOClient.Socket | undefined, () => void] => {

  const disconnect  = useCallback(() => {
    if(workspace) {
      sockets[workspace].disconnect();
      // 연결 끊을때는 지우기
      delete sockets[workspace];
    }
  },[workspace])

  if(!workspace) {
      // 한번 맺었던 연결을 끊는 함수 (끝맺음을 잘하자)
    return [undefined, disconnect];
  }
  
  sockets[workspace] = io.connect(`${backUrl}/ws-${workspace}`,{
    transports: ['websocket'],
  });

  return [sockets[workspace], disconnect]
}

export default useSocket;

 

  const [socket, disconnect ] = useSocket(workspace);

  useEffect(()=>{
    if(channelData && userData){
      socket?.emit("login",{id : userData.id, channels: channelData.map((y)=> y.id)});
    }
  },[userData, channelData, socket]);

  // socket연결을 끊어줄 때
  useEffect(()=>{
    return () => {
      disconnect();
    }
  },[workspace, disconnect])

스크린샷 2023-11-01 오후 6.16.37.png
버전이 달라서 이런 현상이 생기는건지 잘 모르겠습니다. ..

답변 1

답변을 작성해보세요.

1

백엔드 서버랑 프론트 서버랑 소켓이이오 버전이 다른가본데요. 프론트는 몇버전이신가요?

복실묘님의 프로필

복실묘

질문자

2023.11.01

감사합니다 덕분에 해결했습니다!!!