개발 노트

React - Mqtt Client 본문

React

React - Mqtt Client

알 수 없는 사용자 2022. 11. 30. 16:39
import * as mqtt from "mqtt/dist/mqtt.min";
import React, { useEffect, useState } from "react";

 const { carinfo } = useInfo((state) => state);
  // const {client,changeClient,connectstatus,changeConnectStatus,payload, }
  // const [client, setClient] = useState(null);
  const [connectstatus, setConnectStatus] = useState("");
  const [payload, setPayload] = useState([]);
  const options = {  //옵션들
    keepalive: 3000,
    protocolId: "MQTT",
    protocolVersion: 4,
    clean: true,
    reconnectPeriod: 1000,
    connectTimeout: 10 * 60 * 1000,
    will: {
      topic: "WillMsg",
      payload: "Connection Closed abnormally..!",
      qos: 0,
      retain: false,
    },
    rejectUnauthorized: false,
  };

  const mqttConnect = (host, options) => {
    setConnectStatus("Connecting");  //현제 연결 상태를 체크하기위해 만들어논 듯?
    client = mqtt.connect(host, options); //연결할게요~mqtt.connect(host,option)
  };
  useEffect(() => {
    if (!client) { //클라이언트 꺼져있으믄 아래와같이 연결해라 ws = 웹소캣, ip주소 + 포트번호
      mqttConnect("ws://" + window.location.hostname + ":9001", options);
    }
    if (client) {
      console.log(client);
      client?.on("connect", () => {
        setConnectStatus("Connected");
      });
      client?.subscribe("#", 1, (error) => {
        if (error) {  //topic, params, callbackfunction
          console.log("Subscribe to topics error", error);
          return;
        }
      });
      client?.on("error", (err) => {
        console.error("Connection error: ", err);
        client?.end(); //에러났으면 꺼줘
      });
      client?.on("reconnect", () => {
        setConnectStatus("Reconnecting");
      });
      client?.on("message", (topic, message) => {
        const payload = { topic, message: message.toString() };
        setPayload(payload); //message를 받는데 topic,message를 payload에 저장할게
      });                    //보통 payload는 값임  
    }
  }, [client]);

브로커인 mosquito가 있기때문에 server를 따로 만들 필요는 없다.

 

'React' 카테고리의 다른 글

Moment npm  (0) 2022.12.07
Nodejs와 TCP/IP 통신  (0) 2022.12.02
MQTT  (0) 2022.11.29
JSON()을 사용할 때 주의할 점.  (0) 2022.11.27
React - iterable object error  (0) 2022.11.27