Barebone Connection object for MQTT. Works over any kind of binary Streams, TCP, TLS, WebSocket, ...
It uses mqtt-packet for generating and parsing MQTT packets. See it for the full documentations on the packet types.
This library is tested with node v4, v6 and v7. The last version to support older versions of node was mqtt-connection@2.1.1.
npm install mqtt-connection --saveAs a client:
var net = require('net')
var mqttCon = require('mqtt-connection')
var stream = net.createConnection(1883, 'localhost')
var conn = mqttCon(stream)
// conn is your MQTT connection!As a server:
var net = require('net')
var mqttCon = require('mqtt-connection')
var server = new net.Server()
server.on('connection', function (stream) {
var client = mqttCon(stream)
// client connected
client.on('connect', function (packet) {
// acknowledge the connect packet
client.connack({ returnCode: 0 });
})
// client published
client.on('publish', function (packet) {
// send a puback with messageId (for QoS > 0)
client.puback({ messageId: packet.messageId })
})
// client pinged
client.on('pingreq', function () {
// send a pingresp
client.pingresp()
});
// client subscribed
client.on('subscribe', function (packet) {
// send a suback with messageId and granted QoS level
client.suback({ granted: [packet.qos], messageId: packet.messageId })
})
// timeout idle streams after 5 minutes
stream.setTimeout(1000 * 60 * 5)
// connection error handling
client.on('close', function () { client.destroy() })
client.on('error', function () { client.destroy() })
client.on('disconnect', function () { client.destroy() })
// stream timeout
stream.on('timeout', function () { client.destroy(); })
})
// listen on port 1883
server.listen(1883)As a websocket server:
var websocket = require('websocket-stream')
var WebSocketServer = require('ws').Server
var Connection = require('mqtt-connection')
var server = http.createServer()
var wss = new WebSocketServer({server: server})
if (handler) {
server.on('client', handler)
}
wss.on('connection', function (ws) {
var stream = websocket(ws)
var connection = new Connection(stream)
handle(connection)
})
function handle (conn) {
// handle the MQTT connection like
// the net example
}Creates a new MQTT Connection.
Options:
notData: do not listen to the'data'event, so that it can respect backpressure. Pipe theConnectionto another stream to consume the packets. If this option is passedtruethe object will emit no packet-related events.
Send a MQTT connect packet.
options supports the following properties:
protocolId: Protocol ID, usuallyMQIsdp.stringprotocolVersion: Protocol version, usually 3.numberkeepalive: keepalive period in seconds.numberclientId: client ID.stringwill: the client's will message options.objectthat supports the following properties:topic: the will topic.stringpayload: the will payload.stringqos: will qos level.numberretain: will retain flag.booleanproperties: properties of will by MQTT 5.0:willDelayInterval: representing the Will Delay Interval in secondsnumber,payloadFormatIndicator: Will Message is UTF-8 Encoded Character Data or notboolean,messageExpiryInterval: value is the lifetime of the Will Message in seconds and is sent as the Publication Expiry Interval when the Server publishes the Will Messagenumber,contentType: describing the content of the Will Messagestring,responseTopic: String which is used as the Topic Name for a response messagestring,correlationData: The Correlation Data is used by the sender of the Request Message to identify which request the Response Message is for when it is receivedbinary,userProperties: The User Property is allowed to appear multiple times to represent multiple name, value pairsobject
properties: properties MQTT 5.0.objectthat supports the following properties:sessionExpiryInterval: representing the Session Expiry Interval in secondsnumber,receiveMaximum: representing the Receive Maximum valuenumber,maximumPacketSize: representing the Maximum Packet Size the Client is willing to acceptnumber,topicAliasMaximum: representing the Topic Alias Maximum value indicates the highest value that the Client will accept as a Topic Alias sent by the Servernumber,requestResponseInformation: The Client uses this value to request the Server to return Response Information in the CONNACKboolean,requestProblemInformation: The Client uses this value to indicate whether the Reason String or User Properties are sent in the case of failuresboolean,userProperties: The User Property is allowed to appear multiple times to represent multiple name, value pairsobject,authenticationMethod: the name of the authentication method used for extended authenticationstring,authenticationData: Binary Data containing authentication databinary
clean: the 'clean start' flag.booleanusername: username for protocol v3.1.stringpassword: password for protocol v3.1.string
Send a MQTT connack packet.
options supports the following properties:
returnCode: the return code of the connack, success is for MQTT < 5.0reasonCode: suback Reason CodenumberMQTT 5.0properties: properties MQTT 5.0.objectthat supports the following properties:sessionExpiryInterval: representing the Session Expiry Interval in secondsnumber,receiveMaximum: representing the Receive Maximum valuenumber,maximumQoS: maximum qos supported by servernumber,retainAvailable: declares whether the Server supports retained messagesboolean,maximumPacketSize: Maximum Packet Size the Server is willing to acceptnumber,assignedClientIdentifier: Assigned Client Identifierstring,topicAliasMaximum: representing the Topic Alias Maximum value indicates the highest value that the Client will accept as a Topic Alias sent by the Servernumber,reasonString: representing the reason associated with this responsestring,userProperties: The User Property is allowed to appear multiple times to represent multiple name, value pairsobject,wildcardSubscriptionAvailable: this byte declares whether the Server supports Wildcard SubscriptionsbooleansubscriptionIdentifiersAvailable: declares whether the Server supports Subscription Identifiersboolean,sharedSubscriptionAvailable: declares whether the Server supports Shared Subscriptionsboolean,serverKeepAlive: Keep Alive time assigned by the Servernumber,responseInformation: String which is used as the basis for creating a Response Topicstring,serverReference: String which can be used by the Client to identify another Server to usestring,authenticationMethod: the name of the authentication method used for extended authenticationstring,authenticationData: Binary Data containing authentication databinary
Send a MQTT publish packet.
options supports the following properties:
topic: the topic to publish to.stringpayload: the payload to publish, defaults to an empty buffer.stringorbufferqos: the quality of service level to publish on.numbermessageId: the message ID of the packet, required if qos > 0.numberretain: retain flag.booleanproperties:objectpayloadFormatIndicator: Payload is UTF-8 Encoded Character Data or notboolean,messageExpiryInterval: the lifetime of the Application Message in secondsnumber,topicAlias: value that is used to identify the Topic instead of using the Topic Namenumber,responseTopic: String which is used as the Topic Name for a response messagestring,correlationData: used by the sender of the Request Message to identify which request the Response Message is for when it is receivedbinary,userProperties: The User Property is allowed to appear multiple times to represent multiple name, value pairsobject,subscriptionIdentifier: representing the identifier of the subscriptionnumber,contentType: String describing the content of the Application Messagestring
Send a MQTT [puback, pubrec, pubcomp, unsuback] packet.
options supports the following properties:
messageId: the ID of the packetreasonCode: Reason Code by packetnumberproperties:objectreasonString: representing the reason associated with this responsestring,userProperties: The User Property is allowed to appear multiple times to represent multiple name, value pairsobject
Send a MQTT pubrel packet.
options supports the following properties:
dup: duplicate message flagreasonCode: pubrel Reason CodenumbermessageId: the ID of the packetproperties:objectreasonString: representing the reason associated with this responsestring,userProperties: The User Property is allowed to appear multiple times to represent multiple name, value pairsobject
Send a MQTT subscribe packet.
options supports the following properties:
dup: duplicate message flagmessageId: the ID of the packetproperties:objectsubscriptionIdentifier: representing the identifier of the subscriptionnumber,userProperties: The User Property is allowed to appear multiple times to represent multiple name, value pairsobject
subscriptions: a list of subscriptions of the form[{topic: a, qos: 0}, {topic: b, qos: 1}][{topic: a, qos: 0, nl: false, rap: true, rh: 15 }, {topic: b, qos: 1, nl: false, rap: false, rh: 100 }]MQTT 5.0 Example
Send a MQTT suback packet.
options supports the following properties:
granted: a vector of granted QoS levels, of the form[0, 1, 2]messageId: the ID of the packetreasonCode: suback Reason Codenumberproperties:objectreasonString: representing the reason associated with this responsestring,userProperties: The User Property is allowed to appear multiple times to represent multiple name, value pairsobject
Send a MQTT unsubscribe packet.
options supports the following properties:
messageId: the ID of the packetreasonCode: unsubscribe Reason Code MQTT 5.0numberdup: duplicate message flagproperties:objectuserProperties: The User Property is allowed to appear multiple times to represent multiple name, value pairsobject
unsubscriptions: a list of topics to unsubscribe from, of the form["topic1", "topic2"]
Send a MQTT [pingreq, pingresp] packet.
Send a MQTT disconnect packet.
options supports the following properties only MQTT 5.0:
reasonCode: Disconnect Reason Codenumberproperties:objectsessionExpiryInterval: representing the Session Expiry Interval in secondsnumber,reasonString: representing the reason for the disconnectstring,userProperties: The User Property is allowed to appear multiple times to represent multiple name, value pairsobject,serverReference: String which can be used by the Client to identify another Server to usestring
Send a MQTT auth packet. Only MQTT 5.0
options supports the following properties only MQTT 5.0:
reasonCode: Auth Reason Codenumberproperties:objectauthenticationMethod: the name of the authentication method used for extended authenticationstring,authenticationData: Binary Data containing authentication databinary,reasonString: representing the reason for the disconnectstring,userProperties: The User Property is allowed to appear multiple times to represent multiple name, value pairsobject
function(packet) {}
Emitted when a MQTT connect packet is received by the client.
packet is an object that may have the following properties:
version: the protocol version stringversionNum: the protocol version numberkeepalive: the client's keepalive periodclientId: the client's IDwill: an object with the following keys:topic: the client's will topicpayload: the will messageretain: will retain flagqos: will qos levelproperties: properties of will
properties: properties of packetclean: clean start flagusername: v3.1 usernamepassword: v3.1 password
function(packet) {}
Emitted when a MQTT connack packet is received by the client.
packet is an object that may have the following properties:
returnCode: the return code of the connack packetproperties: properties of packet
function(packet) {}
Emitted when a MQTT publish packet is received by the client.
packet is an object that may have the following properties:
topic: the topic the message is published onpayload: the payload of the messagemessageId: the ID of the packetproperties: properties of packetqos: the QoS level to publish at
function(packet) {}
Emitted when a MQTT [puback, pubrec, pubrel, pubcomp, unsuback]
packet is received by the client.
packet is an object that may contain the property:
messageId: the ID of the packetproperties: properties of packet
function(packet) {}
Emitted when a MQTT subscribe packet is received.
packet is an object that may contain the properties:
messageId: the ID of the packetproperties: properties of packetsubscriptions: an array of objects representing the subscribed topics, containing the following keystopic: the topic subscribed toqos: the qos level of the subscription
function(packet) {}
Emitted when a MQTT suback packet is received.
packet is an object that may contain the properties:
messageId: the ID of the packetproperties: properties of packetgranted: a vector of granted QoS levels
function(packet) {}
Emitted when a MQTT unsubscribe packet is received.
packet is an object that may contain the properties:
messageId: the ID of the packetproperties: properties of packetunsubscriptions: a list of topics the client is unsubscribing from, of the form[topic1, topic2, ...]
function(packet){}
Emitted when a MQTT [pingreq, pingresp, disconnect] packet is received.
packet only includes static header information and can be ignored.
function(packet) {}
Emitted when a MQTT disconnect packet is received.
packet only includes static header information and can be ignored for MQTT < 5.0.
packet is an object that may contain the properties for MQTT 5.0:
reasonCode: disconnect Reason Codeproperties: properties of packet
function(packet) {}
Emitted when a MQTT auth packet is received.
packet is an object that may contain the properties:
reasonCode: Auth Reason Codeproperties: properties of packet
Returns a Transform stream that calls generate().
The stream is configured into object mode.
Returns a Transform stream that embeds a Parser and calls Parser.parse() for each new Buffer. The stream is configured into object mode. It accepts the same options of parser(opts).
mqtt-connection is an OPEN Open Source Project. This means that:
Individuals making significant and valuable contributions are given commit-access to the project to contribute as they see fit. This project is more like an open wiki than a standard guarded open source project.
See the CONTRIBUTING.md file for more details.
mqtt-connection is only possible due to the excellent work of the following contributors:
| Matteo Collina | GitHub/mcollina | Twitter/@matteocollina |
|---|---|---|
| Adam Rudd | GitHub/adamvr | Twitter/@adam_vr |
| Siarhei Buntsevich | GitHub/scarry1992 |
MIT
