[React] webSocket onopen ์˜ค๋ฅ˜

๋šœ๋ฐยท2023๋…„ 5์›” 26์ผ
0

ํŠธ๋Ÿฌ๋ธ”์ŠˆํŒ…

๋ชฉ๋ก ๋ณด๊ธฐ
1/2

๐Ÿšจ ๋ฌธ์ œ์ 

๋ฆฌ์•กํŠธ์™€ ์Šคํ”„๋ง ์„œ๋ฒ„๊ฐ„์˜ ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ์ด ์•ˆ๋จ

IDE์—์„œ๋Š” ์•„๋ฌด๋Ÿฐ ์˜ค๋ฅ˜๊ฐ€ ๋œจ์ง€ ์•Š์Œ

install

React sockjs-client, stomp ์„ค์น˜

npm install @stomp/stompjs
// ๋ฒ„์ „ ๋ฌธ์ œ์‹œ --force ๋ถ™ํ˜€์ค€๋‹ค

npm install sockjs-client
// ๋ฒ„์ „ ๋ฌธ์ œ์‹œ --force ๋ถ™ํ˜€์ค€๋‹ค

๋ชจ๋“ˆ import๊ฐ€ ์•ˆ๋จ
์•„๋ž˜ ์—๋Ÿฌ๋ฉ”์„ธ์ง€ ๋œธ

yarn remove sockjs-client, stomp ํ›„ ์žฌ์„ค์น˜

yarn add @types/stompjs @types/sockjs-client

import ์˜ค๋ฅ˜ ํ•ด๊ฒฐ !

import SockJS from 'sockjs-client';
import StompJs from 'stompjs';

  const socket = new SockJS('/websocket-endpoint'); // ์›น์†Œ์ผ“ ์—”๋“œํฌ์ธํŠธ URL
    const stompClient = StompJs.over(socket);

    // ์—ฐ๊ฒฐ ์„ฑ๊ณต ์‹œ ์‹คํ–‰๋  ์ฝœ๋ฐฑ ํ•จ์ˆ˜
    const connectCallback = () => {
      console.log('WebSocket ์—ฐ๊ฒฐ ์„ฑ๊ณต');

      // ๊ตฌ๋… ์„ค์ •
      stompClient.subscribe('/topic/messages', (message) => {
        console.log('๋ฐ›์€ ๋ฉ”์‹œ์ง€:', message.body);
      });

      // ๋ฉ”์‹œ์ง€ ๋ฐœ์†ก
      stompClient.send('/app/sendMessage', {}, JSON.stringify({ text: 'Hello WebSocket' }));
    };

    // ์—ฐ๊ฒฐ ์‹œ๋„
    stompClient.connect({}, connectCallback);

    // ์ปดํฌ๋„ŒํŠธ ์–ธ๋งˆ์šดํŠธ ์‹œ ์—ฐ๊ฒฐ ์ข…๋ฃŒ
     // ์ปดํฌ๋„ŒํŠธ ์–ธ๋งˆ์šดํŠธ ์‹œ ์—ฐ๊ฒฐ ์ข…๋ฃŒ
    return () => {
      stompClient.disconnect(() => {
        console.log('WebSocket ์—ฐ๊ฒฐ ์ข…๋ฃŒ');
        // ์ถ”๊ฐ€๋กœ ์ˆ˜ํ–‰ํ•  ๋กœ์ง ์ž‘์„ฑ ๊ฐ€๋Šฅ
      });
    };

์ธ์ค„์•Œ์•˜๋Š”๋ฐ ์•„๋‹ˆ์˜€์Œ. ๐Ÿช“..

์ปดํŒŒ์ผ ์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ–ˆ๋‹ค ํ‘ํ‘

ERROR in ../../node_modules/stompjs/lib/stomp-node.js 12:8-22
Module not found: Error: Can't resolve 'net' in 

import ๊ตฌ๋ฌธ์„ ์ˆ˜์ •ํ•˜๊ณ  StompJS.over > StompJS.Client()๋กœ ๋ณ€๊ฒฝ

import * as StompJS from '@stomp/stompjs';

useEffect(() => {
    // ์›น์†Œ์ผ“ ์—ฐ๊ฒฐ ์„ค์ •
    const socket = new SockJS('https://localhost:8080/ws/connect-websocket'); // ์›น์†Œ์ผ“ ์—”๋“œํฌ์ธํŠธ URL
    // const stompClient = StompJS.over(socket);
    // var stompClient = require("stompjs/lib/stomp.js").Stomp
    const stompClient = new StompJS.Client();


    const connectCallback = () => {
      console.log('WebSocket ์—ฐ๊ฒฐ ์„ฑ๊ณต');

      // ๊ตฌ๋… ์„ค์ •
      stompClient.subscribe('/topic/messages', (message) => {
        console.log('๋ฐ›์€ ๋ฉ”์‹œ์ง€:', message.body);
      });

      // ๋ฉ”์‹œ์ง€ ๋ฐœ์†ก
      stompClient.publish({
        destination: '/app/sendMessage',
        body: JSON.stringify({ text: 'Hello WebSocket' }),
      });
    };

    // const errorCallback = (error) => {
    //   console.error('WebSocket ์—ฐ๊ฒฐ ์—๋Ÿฌ:', error);
    // };

    socket.onopen = () => {
      console.log('WebSocket ์—ฐ๊ฒฐ ์—ด๋ฆผ');
      stompClient.configure({
        brokerURL: 'https://localhost:8080/ws/connect-websocket',
        onConnect: connectCallback,
        // onError: errorCallback,
      });
      stompClient.activate();
    };

    socket.onclose = () => {
      console.log('WebSocket ์—ฐ๊ฒฐ ์ข…๋ฃŒ');
    };

    // ์ปดํฌ๋„ŒํŠธ ์–ธ๋งˆ์šดํŠธ ์‹œ ์—ฐ๊ฒฐ ์ข…๋ฃŒ
    return () => {
      stompClient.deactivate();
      socket.close();
    };

  }, []);
profile
์„ฑ์žฅํ•˜๊ณ ์‹ถ์šด ๊ฐญ์•Œ์ž ๐Ÿฅบ๐Ÿ”ฅ

0๊ฐœ์˜ ๋Œ“๊ธ€