MQTT.JS는 Node.js 및 브라우저 용 JavaScript로 작성된 MQTT 프로토콜의 클라이언트 라이브러리입니다.
MQTT.JS는 오픈 오픈 소스 프로젝트입니다. 기여 섹션을 참조하여 이것이 무엇을 의미하는지 확인하십시오.
v5.0.0 (07/2023)
MqttClient 인스턴스를 만들 때 new 것이 필요합니다.v4.0.0 (릴리스 04/2020)은 모든 수명 노드 버전에 대한 지원을 제거하고 이제 노드 v12 및 v14를 지원합니다. 또한 일부 기능 추가와 함께 디버그 로깅의 개선 사항을 추가합니다.
깨지는 변경 으로 기본적으로 오류 핸들러가 MQTt.JS 클라이언트에 내장되어 있으므로 오류가 방출되고 사용자가 클라이언트의 오류에 대해 이벤트 핸들러를 생성하지 않은 경우, 처리되지 않은 오류의 결과로 클라이언트가 깨지지 않습니다. 또한 ECONNREFUSED , ECONNRESET 과 같은 일반적인 TLS 오류가 MQTt.JS 클라이언트에서 방출 될 TLS 오류 목록에 추가되었으므로 연결 오류로 처리 할 수 있습니다.
v3.0.0은 MQTT 5에 대한 지원, 노드 v10.x에 대한 지원 및 신뢰성을 향상시키기위한 많은 수정을 추가합니다.
참고 : MQTT V5 지원은 아직 중개인에 의해 구현되지 않았기 때문에 실험적입니다.
v2.0.0은 노드 v0.8, v0.10 및 v0.12에 대한 지원을 제거하고 패킷을 보내는 데 3 배 빠릅니다. 또한 V1.0.0, 주로 mqtt.createConnection 및 mqtt.Server 의 모든 감가 상승 기능을 제거합니다. v2.0.0에서 구독은 clean: true . v1.xx는 현재 LTS 에 있으며 V0.8, V0.10 및 V0.12 사용자가있는 한 계속 지원됩니다.
깨진 변경 으로, 이전 클라이언트의 encoding 옵션이 제거되며 이제 Connect Message의 password 제외하고는 Buffer 인 게시물의 payload 제외하고 모든 것이 UTF-8입니다.
또 다른 파괴 변경 은 MQTT.JS가 이제 MQTT v3.1.1로 기본값을 작성하므로 오래된 브로커를 지원하려면 클라이언트 옵션 Doc을 읽으십시오.
v1.0.0은 프로젝트의 전체 아키텍처를 개선합니다.이 구성 요소는 이제 세 가지 구성 요소로 분할됩니다. 새로운 클라이언트는 30% 팩터로 성능을 향상시키고 WebSocket 지원을 포함 시키며 (MOWS는 이제 더 이상 사용되지 않았으며) QOS 1 및 2에 대한 지원이 더 좋습니다. 이전 API는 여전히 지원되지만 더 이상 사용되지 않으므로이 readme에는 문서화되어 있지 않습니다.
npm install mqtt --save단순성을 위해 가입자와 게시자를 같은 파일에 넣으십시오.
const mqtt = require ( "mqtt" ) ;
const client = mqtt . connect ( "mqtt://test.mosquitto.org" ) ;
client . on ( "connect" , ( ) => {
client . subscribe ( "presence" , ( err ) => {
if ( ! err ) {
client . publish ( "presence" , "Hello mqtt" ) ;
}
} ) ;
} ) ;
client . on ( "message" , ( topic , message ) => {
// message is Buffer
console . log ( message . toString ( ) ) ;
client . end ( ) ;
} ) ;산출:
Hello mqttMQTT.JS는 React Native Applications에서 사용할 수 있습니다. 그것을 사용하려면 React Native 예제를 참조하십시오
자신의 MQTT 브로커를 실행하려면 Mosquitto 또는 Aedes-Cli를 사용하여 시작할 수 있습니다.
테스트 인스턴스를 사용할 수도 있습니다 : test.mosquitto.org.
별도의 중개인을 설치하지 않으려면 AEDES를 사용해 볼 수 있습니다.
const mqtt = require ( "mqtt" ) // require mqtt
const client = mqtt . connect ( "mqtt://test.mosquitto.org" ) // create a client import mqtt from "mqtt" ; // import namespace "mqtt"
let client = mqtt . connect ( "mqtt://test.mosquitto.org" ) ; // create a client import { connect } from "mqtt" ; // import connect from mqtt
let client = connect ( "mqtt://test.mosquitto.org" ) ; // create a client mqtt.js는 브로커와 상호 작용하도록 명령을 묶습니다. 경로에서 사용할 수 있으려면 전 세계적으로 MQTT.JS를 설치해야합니다.
npm install mqtt -g그런 다음 하나의 터미널에서
mqtt sub -t ' hello ' -h ' test.mosquitto.org ' -v다른
mqtt pub -t ' hello ' -h ' test.mosquitto.org ' -m ' from MQTT.js ' 명령 도움말은 mqtt help <command> 참조하십시오.
mqtt.js는 디버깅 목적으로 디버그 패키지를 사용합니다. 디버그 로그를 활성화하려면 런타임에 다음 환경 변수를 추가하십시오.
# ( example using PowerShell, the VS Code default )
$env:DEBUG='mqttjs*' WebSocket 연결의 중요한 부분은 연결이 떨어지고 클라이언트가 다시 연결해야 할 때 수행해야 할 일입니다. MQTT에는 내장 재 연결 지원이있어 응용 프로그램에 적합한 방식으로 작동하도록 구성 할 수 있습니다.
transformWsUrl (WebSocket 만 해당)으로 인증 옵션을 새로 고침 / 서명 된 URLMQTT 연결이 떨어지고 다시 연결 해야하는 경우, 연결과 관련된 인증이 기본 인증 메커니즘으로 최신 상태로 유지되도록 요구하는 것이 일반적입니다. 예를 들어, 일부 응용 프로그램은 초기 연결에 연결 옵션이있는 인증 토큰을 전달할 수 있지만 다른 클라우드 서비스에는 각 연결마다 URL에 서명해야 할 수도 있습니다.
응용 프로그램 라이프 사이클에서 재 연결이 발생할 때 원래 인증 데이터가 만료되었을 수 있습니다.
이를 해결하기 위해 transformWsUrl 이라는 후크를 사용하여 다시 연결시 연결 URL 또는 클라이언트 옵션을 조작 할 수 있습니다.
예제 (각 재 연결에서 ClientId & username 업데이트) :
const transformWsUrl = ( url , options , client ) => {
client . options . username = `token= ${ this . get_current_auth_token ( ) } ` ;
client . options . clientId = ` ${ this . get_updated_clientId ( ) } ` ;
return ` ${ this . get_signed_cloud_url ( url ) } ` ;
}
const connection = await mqtt . connectAsync ( < wss url > , {
... ,
transformWsUrl : transformUrl ,
} );이제 새로운 WebSocket 연결이 열릴 때마다 (너무 자주 너무 자주) 신선한 서명 URL 또는 신선한 인증 토큰 데이터를 얻을 수 있습니다.
참고 : 현재이 후크는 약속을 지원하지 않습니다 . 즉, 최신 인증 토큰을 사용하려면 Application 수준 인증을 취급하는 외부 메커니즘이 실행되어 WebSocket 연결이 단순히 최신 유효한 토큰 또는 서명 된 URL을 잡을 수 있도록해야합니다.
createWebsocket (WebSocket 만 해당)로 WebSockets 사용자 정의사용자 정의 WebSocket 서브 프로토콜 또는 헤더를 추가하여 사용자 정의 인증을 통한 프록시를 통해 연결을 열어야하는 경우이 콜백을 사용하면 MQTT 클라이언트에서 사용될 WebSocket의 고유 한 인스턴스를 만들 수 있습니다.
const createWebsocket = ( url , websocketSubProtocols , options ) => {
const subProtocols = [
websocketSubProtocols [ 0 ] ,
'myCustomSubprotocolOrOAuthToken' ,
]
return new WebSocket ( url , subProtocols )
}
const client = await mqtt . connectAsync ( < wss url > , {
... ,
createWebsocket : createWebsocket ,
} );reconnectPeriod 옵션으로 다시 연결을 활성화합니다 연결이 삭제 될 때 MQTT 클라이언트가 자동으로 다시 연결하려면 클라이언트 옵션 reconnectPeriod 0보다 큰 값으로 설정해야합니다. 0의 값은 다시 연결을 비활성화 한 다음 최종 연결이 삭제 될 때 최종 연결을 종료해야합니다.
기본값은 1000ms이므로 연결을 잃은 후 1 초를 다시 연결하려고합니다.
이것은 연결 시간 초과 후 또는 성공적인 연결 후에 만 재 연결을 가능하게합니다. (기본적으로) 서버의 Connack 오류로 적극적으로 거부되는 재 시도 연결을 활성화 하지 않습니다 .
Connack 오류에 대한 자동 재 연결을 활성화하려면 reconnectOnConnackError: true 설정하십시오.
클라이언트가 옵션을 설정하면 autoUseTopicAlias:true mqtt.js는 기존 주제 별명을 자동으로 사용합니다.
예제 시나리오 :
1. PUBLISH topic: ' t1 ' , ta:1 (register)
2. PUBLISH topic: ' t1 ' - > topic: ' ' , ta:1 (auto use existing map entry)
3. PUBLISH topic: ' t2 ' , ta:1 (register overwrite)
4. PUBLISH topic: ' t2 ' - > topic: ' ' , ta:1 (auto use existing map entry based on the receent map)
5. PUBLISH topic: ' t1 ' (t1 is no longer mapped to ta:1)사용자는 어떤 주제 별명에 매핑 된 주제를 관리 할 필요가 없습니다. 사용자가 주제 별명을 등록하려면 주제 별명으로 주제를 게시하십시오. 사용자가 주제 별명을 사용하려면 주제 별명없이 주제를 게시하십시오. 맵핑 된 주제 별칭이 있으면 속성으로 추가하고 주제를 빈 문자열로 업데이트하십시오.
클라이언트가 옵션을 설정하면 autoAssignTopicAlias:true mqtt.js는 기존 주제 별명을 자동으로 사용합니다. 주제 별명이 없으면 새로운 빈 주제 별명을 자동으로 할당하십시오. 주제 별명이 완전히 사용되면 LRU (최근에 사용 된 최소한 사용) 주제 알리아 항목이 덮어 씁니다.
예제 시나리오 :
The broker returns CONNACK (TopicAliasMaximum:3)
1. PUBLISH topic: ' t1 ' - > ' t1 ' , ta:1 (auto assign t1:1 and register)
2. PUBLISH topic: ' t1 ' - > ' ' , ta:1 (auto use existing map entry)
3. PUBLISH topic: ' t2 ' - > ' t2 ' , ta:2 (auto assign t1:2 and register. 2 was vacant)
4. PUBLISH topic: ' t3 ' - > ' t3 ' , ta:3 (auto assign t1:3 and register. 3 was vacant)
5. PUBLISH topic: ' t4 ' - > ' t4 ' , ta:1 (LRU entry is overwritten)또한 사용자는 게시 주제를 사용하여 주제 알리아 쌍을 수동으로 등록 할 수 있습니다. '일부', ta : x. 자동 주제 별명 할당과 잘 어울립니다.
mqtt.connect()mqtt.connectAsync()mqtt.Client()mqtt.Client#connect()mqtt.Client#publish()mqtt.Client#publishAsync()mqtt.Client#subscribe()mqtt.Client#subscribeAsync()mqtt.Client#unsubscribe()mqtt.Client#unsubscribeAsync()mqtt.Client#end()mqtt.Client#endAsync()mqtt.Client#removeOutgoingMessage()mqtt.Client#reconnect()mqtt.Client#handleMessage()mqtt.Client#connectedmqtt.Client#reconnectingmqtt.Client#getLastMessageId()mqtt.Store()mqtt.Store#put()mqtt.Store#del()mqtt.Store#createStream()mqtt.Store#close()주어진 URL 및 옵션으로 지정된 브로커에 연결하고 클라이언트를 반환합니다.
URL은 다음과 같은 프로토콜에있을 수 있습니다 : 'mqtt', 'mqtts', 'tcp', 'tls', 'ws', 'wss', 'wxs', 'alis'. UNIX 소켓에 연결하려는 경우 +unix 접미사를 프로토콜에 추가하십시오 (예 : mqtt+unix ). unixSocket 속성을 자동으로 설정합니다.
URL은 URL.parse() 에 의해 반환 된 객체 일 수 있습니다.이 경우 두 객체가 병합됩니다. 즉, URL과 Connect 옵션 모두로 단일 객체를 전달할 수 있습니다.
[{ host: 'localhost', port: 1883 }, ... ] ,이 경우 모든 연결에서 배열이 반복되는 컨텐츠가있는 servers 옵션을 지정할 수도 있습니다.
모든 MQTT 관련 옵션은 클라이언트 생성자를 참조하십시오.
connect 기능 주변의 비동기 래퍼.
클라이언트가 'connect' 또는 'end' 이벤트를 해고 할 때 mqtt.Client 인스턴스로 해결되는 Promise 반환하거나 'error' 해고되면 오류를 거부합니다.
manualConnect 옵션은이 기능에 의해 반환 된 약속이 기본 클라이언트가 이벤트를 시작하지 않기 때문에 해결하거나 거부하지 않게합니다.
Client 클래스는 임의의 전송 방법 (TCP, TLS, WebSocket, ECC)을 통해 클라이언트 연결을 MQTT 브로커에 랩합니다. Client 는 자체 이벤트가있는 이벤트 미터입니다
Client 다음을 자동으로 처리합니다.
논쟁은 다음과 같습니다.
streamBuilder connect 이벤트를 지원하는 Stream 클래스의 서브 클래스를 반환하는 함수입니다. 일반적으로 net.Socket .options 은 클라이언트 연결 옵션입니다 (참조 : Connect 패킷 참조). 기본값 : wsOptions : WebSocket 연결 옵션입니다. 기본값은 {} 입니다. WebSockets에만 해당됩니다. 가능한 옵션은 https://github.com/websockets/ws/blob/master/doc/ws.md를 살펴 봅니다.
keepalive : 60 초, 비활성화하려면 0 으로 설정하십시오
reschedulePings : 패킷을 전송 한 후 핑 메시지를 변경합니다 ( true )
clientId : 'mqttjs_' + Math.random().toString(16).substr(2, 8)
protocolId : 'MQTT'
protocolVersion : 4
clean : true , 오프라인에서 QoS 1 및 2 메시지를 받도록 False로 설정
reconnectPeriod : 1000 밀리 초, 두 번의 연결 사이의 간격. 0 으로 설정하여 자동 재 연결을 비활성화합니다.
reconnectOnConnackError : false , Connack에 오류가 발생한 경우 다시 연결 해야하는지 여부.
connectTimeout : 30 * 1000 밀리 초, Connack을 받기 전에 기다릴 시간
username : 브로커가 요구하는 사용자 이름 (있는 경우)
password : 브로커가 요구하는 비밀번호
incomingStore : 들어오는 패킷을위한 상점
outgoingStore : 나가는 패킷을위한 상점
queueQoSZero : 연결이 끊어지면 큐가 나가는 QoS Zero 메시지 (기본값 true )
customHandleAcks : MQTT 5 Custom Handling Puback 및 PubRec 패킷의 기능. 콜백 :
customHandleAcks: function ( topic , message , packet , done ) { /*some logic with calling done(error, reasonCode)*/ } autoUseTopicAlias : 기능을 사용하여 자동 주제 별명을 활성화합니다
autoAssignTopicAlias : 자동 주제 별명을 활성화 함수를 지정합니다
properties : 속성 MQTT 5.0. 다음 속성을 지원하는 object :
sessionExpiryInterval : 세션 만료 간격을 초의 number ,receiveMaximum : 수신 최대 가치 number 나타냅니다.maximumPacketSize : 최대 패킷 크기를 나타내는 클라이언트가 number 기꺼이 받아들이려고합니다.topicAliasMaximum : 주제 별명을 나타내는 최대 값을 나타내는 최대 값은 클라이언트가 서버 number 로 전송 된 주제 별명으로 수용 할 최고 값을 나타냅니다.requestResponseInformation : 클라이언트는이 값을 사용하여 서버가 Connack boolean 에서 응답 정보를 반환하도록 요청합니다.requestProblemInformation : 클라이언트는이 값을 사용하여 사유 또는 사용자 속성이 실패의 경우 boolean 전송되는지 여부를 나타냅니다.userProperties : 사용자 속성은 여러 이름을 나타내려면 여러 번 표시되며 값 쌍 object ,authenticationMethod : 확장 인증 string 에 사용되는 인증 방법의 이름,authenticationData : 인증 데이터 binary 를 포함하는 이진 데이터 authPacket : 인증 패킷 object 에 대한 설정
will : 클라이언트가 심하게 분리 할 때 브로커가 자동으로 보낼 메시지. 형식은 다음과 같습니다.
topic : 게시 주제 게시payload : 게시 메시지qos : QOSretain : 깃발을 유지합니다properties : MQTT 5.0의 유언장의 속성 :willDelayInterval : Will 지연 간격을 초의 number 로 나타냅니다.payloadFormatIndicator : Will 메시지는 UTF-8 인코딩 된 문자 데이터이거나 boolean 아닙니다.messageExpiryInterval : value는 몇 초 만에 Will 메시지의 수명이며 서버가 Will 메시지 number 게시 할 때 출판 만료 간격으로 전송됩니다.contentType : Will 메시지 string 의 내용을 설명하고responseTopic : 응답 메시지 문자열의 주제 이름으로 사용되는 string ,correlationData : 상관 관계 데이터는 요청 메시지의 발신자가 사용하여 응답 메시지가 binary 받을 때 어떤 응답 메시지가 있는지 식별합니다.userProperties : 사용자 속성은 여러 이름을 나타내려면 여러 번 나타날 수 있습니다 object transformWsUrl : 옵션 (url, options, client) => url 함수 만 있습니다. 재 연결 시가 만료 될 수있는 서명 URL을 구현하는 데 사용할 수 있습니다.
createWebsocket : 선택 사양 url, websocketSubProtocols, options) => Websocket 함수 만 있습니다. 사용자 정의 WebSocket 서브 프로토콜 또는 구현을 구현하는 데 사용할 수 있습니다.
resubscribe : 연결이 끊어지고 다시 연결되면 구독 주제가 자동 구독 ( true )
messageIdProvider : Custom MessageId 제공 업체. new UniqueMessageIdProvider() 설정되면 충돌이 아닌 MessageId가 제공됩니다.
log : 사용자 정의 로그 함수. 기본값은 디버그 패키지를 사용합니다.
manualConnect : 생성자가 connect 호출을 방지합니다. 이 경우 mqtt.connect 가 호출되면 client.connect 수동으로 호출해야합니다.
timerVariant : auto 로의 기본값은 환경에 가장 적합한 타이머를 결정하려고 시도합니다. 탐지 문제가있는 경우 worker 또는 native 으로 설정할 수 있습니다. 아무도 당신에게 적합한 경우, 설정 및 명확한 속성으로 타이머 객체를 전달할 수 있습니다.
timerVariant: {
set : ( func , timer ) => setInterval ( func , timer ) ,
clear : ( id ) => clearInterval ( id )
} forceNativeWebSocket : 원시 WebSocket의 사용을 강제하기 위해 감지 문제가있는 경우 (예 : ws does not work in the browser ) true로 설정합니다. 생성 된 첫 번째 클라이언트에 대해 TRUE로 설정하면 모든 클라이언트가 기본 WebSocket을 사용합니다. 반대로, 설정되지 않으면 거짓으로 설정하지 않으면 모두 감지 결과를 사용합니다.
unixSocket : UNIX 소켓에 연결하려면 이것을 true로 설정하십시오.
MQTTS (TLS를 통한 MQTT)가 필요한 경우 options 객체가 tls.connect() 로 전달됩니다. 자체 서명 된 인증서를 사용하는 경우 rejectUnauthorized: false 설정하십시오. 그러나 이것은 중간 공격의 잠재적 인 사람에게 당신을 노출시키고 생산에 권장되지 않으므로 조심하십시오.
MQTTS 및 MQTT와 같은 단일 포트에서 여러 TLS 프로토콜을 지원하는 사람들의 경우 ALPNProtocols 옵션을 사용합니다. 이를 통해 응용 프로그램 계층 프로토콜 협상 (ALPN) 프로토콜을 정의 할 수 있습니다. ALPNProtocols 설정을 기반으로 문자열 배열, 버퍼 또는 UINT8ARRAY로 설정할 수 있습니다.
MQTT 3.1 (3.1.1 준수하지 않음) 만 지원하는 브로커에 연결하는 경우 다음 옵션을 통과해야합니다.
{
protocolId : 'MQIsdp' ,
protocolVersion : 3
}이것은 RabbitMQ 3.2.4 및 모기 <1.3에서 확인됩니다. 모기 버전 1.3과 1.4는 그없이 잘 작동합니다.
'connect' function (connack) {}
성공 (RE) 연결 (예 : Connack RC = 0)에서 방출됩니다.
connack Connack 패킷을 받았습니다. clean Connection 옵션이 false 이고 서버가 clientId 연결 옵션에 대한 이전 세션이있는 경우 connack.sessionPresent 플래그가 true 입니다. 이 경우 저장된 세션에 의존하고 고객을 위해 구독 명령을 보내지 않는 것이 좋습니다. 'reconnect' function () {}
재 연결이 시작될 때 방출됩니다.
'close' function () {}
연결이 끊긴 후 방출됩니다.
'disconnect' function (packet) {}
브로커로부터 분리 패킷을 수신 한 후 방출됩니다. MQTT 5.0 기능.
'offline' function () {}
클라이언트가 오프라인 상태가되면 방출됩니다.
'error' function (error) {}
클라이언트가 연결할 수없는 경우 (예 : Connack RC! = 0) 또는 구문 분석 오류가 발생할 때 방출됩니다.
다음 TLS 오류는 error 이벤트로 방출됩니다.
ECONNREFUSEDECONNRESETEADDRINUSEENOTFOUND'end' function () {}
mqtt.Client#end() 호출 될 때 방출됩니다. 콜백이 mqtt.Client#end() 로 전달 된 경우 콜백이 돌아 오면이 이벤트가 방출됩니다.
'message' function (topic, message, packet) {}
클라이언트가 게시 패킷을받을 때 방출됩니다
topic 주제message 페이로드packet MQTT-PACKET에 정의 된대로 패킷을 받았습니다 'packetsend' function (packet) {}
클라이언트가 패킷을 보낼 때 방출됩니다. 여기에는 .published () 패킷과 구독 및 연결 관리를 위해 MQTT에서 사용하는 패킷이 포함됩니다.
packet MQTT-PACKET에 정의 된대로 패킷을 받았습니다 'packetreceive' function (packet) {}
클라이언트가 패킷을받을 때 방출됩니다. 여기에는 가입 주제의 패킷과 구독 및 연결 관리를 위해 MQTT에서 사용하는 패킷이 포함됩니다.
packet MQTT-PACKET에 정의 된대로 패킷을 받았습니다 기본적으로 클라이언트는 생성자가 호출 될 때 연결됩니다. 이를 방지하기 위해 manualConnect 옵션을 true 로 설정하고 client.connect() 수동으로 호출 할 수 있습니다.
주제에 메시지를 게시하십시오
topic 는 String 에 게시 할 주제입니다message 게시, Buffer 또는 String 의 메시지입니다options 다음을 포함하여 게시 할 옵션입니다.qos QOS 레벨, Number , 기본 0Boolean , 기본 false retaindup Mark는 중복 플래그, Boolean , 기본 falseproperties : MQTT 5.0 속성 objectpayloadFormatIndicator : Payload는 UTF-8 인코딩 된 문자 데이터이거나 boolean 아닙니다.messageExpiryInterval : 애플리케이션 메시지의 수명 인 초 number ,topicAlias : 주제 이름 number 사용하는 대신 주제를 식별하는 데 사용되는 값,responseTopic : 응답 메시지 문자열의 주제 이름으로 사용되는 string ,correlationData : 요청 메시지의 발신자가 사용하여 응답 메시지가 수신 된 binary 에 대한 응답 메시지를 식별하는 데 사용됩니다.userProperties : 사용자 속성은 여러 이름을 나타내려면 여러 번 표시되며 값 쌍 object ,subscriptionIdentifier : 가입 number 의 식별자를 나타냅니다.contentType : 응용 프로그램 메시지 string 의 내용을 설명하는 문자열cbStorePut function () , QOS가 1 또는 2 인 경우 메시지를 outgoingStore 에 넣을 때 발사되었습니다.callback - function (err, packet) , QoS 처리가 완료되면 발사되었거나 다음 진드기에서 QoS 0. 클라이언트가 분리되는 경우 오류가 발생합니다. 비동기 publish . Promise<Packet | undefined> .
messageId 속성이있는 모든 것입니다.주제 나 주제를 구독하십시오
topic 구독하거나 구독 할 주제를 구독하는 String Array 입니다. 또한 객체 일 수 있으며, 객체 키로 주제 이름을 가지고 있으며 {'test1': {qos: 0}, 'test2': {qos: 1}} 과 같이 QoS 값으로 QOS 값을 갖습니다. MQTT topic WildCard 문자가 지원됩니다 ( + - 단일 레벨 및 # - 다중 레벨의 경우)options 다음을 포함하여 구독 할 옵션입니다.qos QOS 구독 수준, 기본 0nl 로컬 MQTT 5.0 플래그 없음 (값이 true 인 경우 응용 프로그램 메시지를 게시 연결의 클라이언트와 동일한 클라이언트와 연결하여 전달해서는 안됩니다)rap 게시 된 MQTT 5.0 플래그로 유지합니다 (이 구독을 사용하여 전달 된 애플리케이션 메시지는 게시 된 깃발을 유지합니다. False,이 구독을 사용하여 전달 된 응용 프로그램 메시지가 0으로 설정되어 있습니다.)rh RETAIN MQTT 5.0 (이 옵션은 구독이 설정 될 때 보유 된 메시지가 전송되는지 여부를 지정합니다.)properties : objectsubscriptionIdentifier : 가입 number 의 식별자를 나타냅니다.userProperties : 사용자 속성은 여러 이름을 나타내려면 여러 번 나타날 수 있습니다 objectcallback - function (err, granted) 콜백은 Suback에서 발사되었습니다.err{topic, qos} 의 배열은 granted 과 같습니다.topic 는 주제에 가입 한 것입니다qos 부여 된 QOS 수준입니다 비동기 subscribe . Promise<ISubscriptionGrant[]> .
주제 나 주제를 구독 취소하십시오
topic 는 String 주제 또는 구독을 취소 할 주제입니다.options : 구독 취소 옵션.properties : objectuserProperties : 사용자 속성은 여러 이름을 나타내려면 여러 번 나타날 수 있습니다 objectcallback - function (err) , 지루에 해고되었습니다. 클라이언트가 연결을 끊는 경우 오류가 발생합니다. 비동기 unsubscribe . Promise<void> 반환합니다.
클라이언트를 닫고 다음 옵션을 수락합니다.
force : 진정으로 전달하면 기내 메시지가 계약되기를 기다리지 않고 클라이언트가 즉시 닫습니다. 이 매개 변수는 선택 사항입니다.options : 분리 옵션.reasonCode : 이유 코드 number 분리합니다properties : objectsessionExpiryInterval : 세션 만료 간격을 초의 number ,reasonString : 분리 string 의 이유를 나타냅니다.userProperties : 사용자 속성은 여러 이름을 나타내려면 여러 번 표시되며 값 쌍 object ,serverReference : String을 사용하기 위해 다른 서버를 식별하기 위해 클라이언트가 사용할 수있는 stringcallback : 클라이언트가 닫히면 호출됩니다. 이 매개 변수는 선택 사항입니다. 비동기 end . Promise<void> 반환합니다.
외부에서 메시지를 제거하십시오. 메시지가 제거되면 나가는 콜백이 오류 ( '메시지 제거')와 함께 호출됩니다.
이 함수가 호출되면 MessageId가 릴리스되어 재사용 가능 해집니다.
mId : 외부인의 메시지의 메시지.connect ()와 동일한 옵션을 사용하여 다시 연결
한 번에 하나씩 배압 지원으로 메시지를 처리합니다. 마음대로 무시되지만 항상 callback 하거나 클라이언트가 매달려 있습니다.
부울 : 클라이언트가 연결된 경우 true 로 설정하십시오. 그렇지 않으면 false .
번호 : 마지막 메시지 ID를 가져옵니다. 이것은 전송 된 메시지만을위한 것입니다.
부울 : 클라이언트가 서버에 다시 연결하려고하는 경우 true 로 설정하십시오. 그렇지 않으면 false .
메시지 저장소의 메모리 구현.
options 상점 옵션입니다.clean : Close가 호출 될 때 ( true ) true , Clean Filkight 메시지 mqtt.Store 의 기타 구현 :
상점에 패킷을 추가하고 패킷은 messageId 속성이있는 모든 것입니다. 패킷이 저장되면 콜백이 호출됩니다.
상점에 모든 패킷이있는 스트림을 만듭니다.
상점에서 패킷을 제거하면 패킷은 messageId 속성이있는 모든 것입니다. 패킷이 제거되면 콜백이 호출됩니다.
가게를 닫습니다.
중요한
브라우저에서 지원되는 유일한 프로토콜은 WebSockets의 MQTT이므로 ws:// 또는 wss:// 프로토콜을 사용해야합니다.
WS 모듈은 NodeJS에서 사용되지만 WebSocket은 브라우저에서 사용됩니다. 이것은 다음을 제외하고 사용자에게 완전히 투명합니다.
wsOption 은 브라우저에서 지원되지 않습니다.
브라우저는 보안상의 이유로 많은 WebSocket 오류를 포착 할 수 없습니다.
이 정보에 액세스하면 악의적 인 웹 페이지가 네트워크에 대한 정보를 얻을 수 있으므로 브라우저는 모든 연결 시간 오류를 구별 할 수없는 방식으로보고해야합니다.
따라서 client.on('error') 을 듣는 것이 Nodejs Env에서 얻을 수있는 모든 오류를 포착하지는 않을 수 있습니다.
Mqtt.js는 Esbuild를 사용하여 번들로 제공됩니다. Webpack, Vite 및 React와 같은 모든 번들과 함께 작업하는 것으로 테스트되었습니다.
dist Folder에서 모든 MQTT 번들 버전을 찾을 수 있습니다.
mqtt.js -iife 형식은 미니어리지 않습니다mqtt.min.js -iife 형식, 미니mqtt.esm.js -ESM 형식 미니mqtt.js> 5.2.0에서 시작하여 코드에서 MQTT를 가져올 수 있습니다.
import mqtt from 'mqtt'번들러가 자동으로 처리합니다.
그렇지 않으면 다음과 같은 특정 번들을 사용하도록 선택할 수 있습니다.
import * as mqtt from 'mqtt/dist/mqtt'
import * as mqtt from 'mqtt/dist/mqtt.min'
import mqtt from 'mqtt/dist/mqtt.esm'Mqtt.js 번들은 http://unpkg.com, 특히 https://unpkg.com/mqtt/dist/mqtt.min.js를 통해 제공됩니다. 버전 범위에 대한 전체 문서는 http://unpkg.com을 참조하십시오.
QoS의 작동 방식은 다음과 같습니다.
데이터 소비에 대해, 분명히, QoS 2> QOS 1> QOS 0, 그것이 당신에게 관심이 있다면.
V5에서 시작 하여이 프로젝트는 TypeScript로 작성되었으며 유형 정의는 패키지에 포함됩니다.
예:
import { connect } from "mqtt"
const client = connect ( 'mqtt://test.mosquitto.org' ) Wechat Mini 프로그램을 지원합니다. wxs 프로토콜을 사용하십시오. WeChat 문서를 참조하십시오.
import 'abortcontroller-polyfill/dist/abortcontroller-polyfill-only' // import before mqtt.
import 'esbuild-plugin-polyfill-node/polyfills/navigator'
const mqtt = require ( "mqtt" ) ;
const client = mqtt . connect ( "wxs://test.mosquitto.org" , {
timerVariant : 'native' // more info ref issue: #1797
} ) ; Ali Mini 프로그램을 지원합니다. alis 프로토콜을 사용하십시오. Alipay 문서를 참조하십시오.
const mqtt = require ( "mqtt" ) ;
const client = mqtt . connect ( "alis://test.mosquitto.org" ) ; MQTT.JS는 오픈 오픈 소스 프로젝트 입니다. 이것은 다음을 의미합니다.
중요하고 귀중한 기여를하는 개인은 프로젝트에 적합한대로 기여하기 위해 프로젝트에 대한 커밋 접근을받습니다. 이 프로젝트는 표준 보호 오픈 소스 프로젝트보다 개방형 위키와 비슷합니다.
자세한 내용은 Contributing.md 파일을 참조하십시오.
mqtt.js는 다음 기고자들의 훌륭한 작업으로 인해 가능합니다.
| 이름 | github | 지저귀다 |
|---|---|---|
| 아담 러드 | Github/Adamvr | 트위터/@adam_vr |
| 마테오 콜리나 | Github/Mcollina | Twitter/@matteocollina |
| Maxime Agor | Github/4rzael | 트위터/@4rzael |
| Siarhei Buntsevich | Github/Scarry1992 | |
| 다니엘 랜드 | Github/Robertslando |
mqtt.js를 지원하려면 저자 및 활성 관리자를 후원하는 것을 고려하십시오.
MIT