class Client (View source)

Constants

LOG_DEBUG

Identifies a debug-level log message

LOG_INFO

Identifies an info-level log message

LOG_NOTICE

Identifies a notice-level log message

LOG_WARNING

Identifies a warning-level log message

LOG_ERR

Identifies an error-level log message

SSL_VERIFY_NONE

Used with setTlsInsecure. Do not verify the identity of the server, thus making the connection insecure.

SSL_VERIFY_PEER

Used with setTlsInsecure. Verify the identity of the server.

Methods

__construct(string|null $id = null, bool $cleanSession = true)

Construct a new Client instance.

setCredentials(string $username, string $password)

Set the username and password to use on connecting to the broker. Must be called before connect.

int|null
setTlsCertificates(string $caPath, string|null $certFile = null, string|null $keyFile = null, string|null $password = null)

Configure the client for certificate based SSL/TLS support. Must be called before connect. Cannot be used in conjunction with setTlsPSK.

setTlsInsecure(bool $value)

Configure verification of the server hostname in the server certificate. If $value is true, it is impossible to guarantee that the host you are connecting to is not impersonating your server. Do not use this function in a real system. Must be called before connect.

int
setTlsOptions(int $certReqs, string|null $tlsVersion = null, string|null $ciphers = null)

Set advanced SSL/TLS options. Must be called before connect.

int
setTlsPSK(string $psk, string $identity, string|null $ciphers = null)

Configure the client for pre-shared-key based TLS support. Must be called before connect. Cannot be used in conjunction with setTlsCertificates.

setWill(string $topic, string $payload, int $qos = 0, bool $retain = false)

Set the client “last will and testament”, which will be sent on an unclean disconnection from the broker.

clearWill()

Remove a previously-set will. No parameters.

setReconnectDelay(int $reconnectDelay, int $exponentialDelay = 0, bool $exponentialBackoff = false)

Control the behaviour of the client when it has unexpectedly disconnected in Client::loopForever().

int
connect(string $host, int $port = 1883, int $keepalive = 60, string|null $interface = null)

Connect to an MQTT broker.

disconnect()

Disconnect from the broker. No parameters.

onConnect(callable $callback)

Set the connect callback. This is called when the broker sends a CONNACK message in response to a connection.

onDisconnect(callable $callback)

Set the disconnect callback. This is called when the broker has received the DISCONNECT command and has disconnected the client.

onLog(callable $callback)

Set the logging callback.

onSubscribe(callable $callback)

Set the subscribe callback. This is called when the broker responds to a subscription request.

onUnsubscribe(callable $callback)

Set the unsubscribe callback. This is called when the broker responds to a unsubscribe request.

onMessage(callable $callback)

Set the message callback. This is called when a message is received from the broker.

onPublish(callable $callback)

Set the publish callback. This is called when a message is published by the client itself.

setMaxInFlightMessages(int $maxInFlightMessages)

Set the number of QoS 1 and 2 messages that can be “in flight” at one time. An in flight message is part way through its delivery flow. Attempts to send further messages with publish will result in the messages being queued until the number of in flight messages reduces.

setMessageRetry(int $messageRetryPeriod)

Set the number of seconds to wait before retrying messages. This applies to publishing messages with QoS > 0.

int
publish(string $topic, string $payload, int $qos = 0, bool $retain = false)

Publish a message on a given topic.

int
subscribe(string $topic, int $qos)

Subscribe to a topic.

int
unsubscribe(string $topic, int $qos)

Unsubscribe from a topic.

loop(int $timeout = 1000)

The main network loop for the client. You must call this frequently in order to keep communications between the client and broker working. If incoming data is present it will then be processed. Outgoing commands, from e.g. publish, are normally sent immediately that their function is called, but this is not always possible.

loopForever(int $timeout = 1000)

Call loop() in an infinite blocking loop. Callbacks will be called as required. This will handle reconnecting if the connection is lost. Call disconnect in a callback to disconnect and return from the loop. Alternatively, call exitLoop to exit the loop without disconnecting. You will need to re-enter the loop again afterwards to maintain the connection.

exitLoop()

Exit the loopForever event loop without disconnecting. You will need to re-enter the loop afterwards in order to maintain the connection.

Details

__construct(string|null $id = null, bool $cleanSession = true)

Construct a new Client instance.

Parameters

string|null $id

The client ID. If omitted or null, one will be generated at random.

bool $cleanSession

Set to true to instruct the broker to clean all messages and subscriptions on disconnect. Must be true if the $id parameter is null.

setCredentials(string $username, string $password)

Set the username and password to use on connecting to the broker. Must be called before connect.

Parameters

string $username

Username to supply to the broker

string $password

Password to supply to the broker

int|null setTlsCertificates(string $caPath, string|null $certFile = null, string|null $keyFile = null, string|null $password = null)

Configure the client for certificate based SSL/TLS support. Must be called before connect. Cannot be used in conjunction with setTlsPSK.

Define the Certificate Authority certificates to be trusted (ie. the server certificate must be signed with one of these certificates) using $caFile. If the server you are connecting to requires clients to provide a certificate, define $certFile and $keyFile with your client certificate and private key. If your private key is encrypted, provide the password as the fourth parameter.

Parameters

string $caPath

Path to the PEM encoded trusted CA certificate files, or to a directory containing them.

string|null $certFile

Path to the PEM encoded certificate file for this client. Optional.

string|null $keyFile

Path to a file containing the PEM encoded private key for this client. Required if certfile is set.

string|null $password

The password for the keyfile, if it is encrypted. If null, the password will be asked for on the command line.

Return Value

int|null

setTlsInsecure(bool $value)

Configure verification of the server hostname in the server certificate. If $value is true, it is impossible to guarantee that the host you are connecting to is not impersonating your server. Do not use this function in a real system. Must be called before connect.

Parameters

bool $value

If set to false, the default, certificate hostname checking is performed. If set to true, no hostname checking is performed and the connection is insecure.

int setTlsOptions(int $certReqs, string|null $tlsVersion = null, string|null $ciphers = null)

Set advanced SSL/TLS options. Must be called before connect.

Parameters

int $certReqs

Whether or not to verify the server. Can be Client::SSL_VERIFY_NONE, to disable certificate verification, or Client::SSL_VERIFY_PEER (the default), to verify the server certificate.

string|null $tlsVersion

The TLS version to use. If null, a default is used. The default value depends on the version of OpenSSL the library was compiled against. Available options on OpenSSL >= 1.0.1 are tlsv1.2, tlsv1.1 and tlsv1.

string|null $ciphers

A string describing the ciphers available for use. See the openssl ciphers tool for more information. If null, the default set will be used.

Return Value

int

int setTlsPSK(string $psk, string $identity, string|null $ciphers = null)

Configure the client for pre-shared-key based TLS support. Must be called before connect. Cannot be used in conjunction with setTlsCertificates.

Parameters

string $psk

The pre-shared key in hex format with no leading "0x".

string $identity

The identity of this client. May be used as the username depending on server settings.

string|null $ciphers

Optional. A string describing the ciphers available for use. See the openssl ciphers tool for more information. If null, the default set will be used.

Return Value

int

setWill(string $topic, string $payload, int $qos = 0, bool $retain = false)

Set the client “last will and testament”, which will be sent on an unclean disconnection from the broker.

Must be called before connect.

Parameters

string $topic

The topic on which to publish the will.

string $payload

The data to send.

int $qos

Optional. Default 0. Integer 0, 1, or 2 indicating the Quality of Service to be used.

bool $retain

Optional. Default false. If true, the message will be retained.

clearWill()

Remove a previously-set will. No parameters.

setReconnectDelay(int $reconnectDelay, int $exponentialDelay = 0, bool $exponentialBackoff = false)

Control the behaviour of the client when it has unexpectedly disconnected in Client::loopForever().

The default behaviour if this method is not used is to repeatedly attempt to reconnect with a delay of 1 second until the connection succeeds.

Parameters

int $reconnectDelay

Set delay between successive reconnection attempts.

int $exponentialDelay

Set max delay between successive reconnection attempts when exponential backoff is enabled

bool $exponentialBackoff

Pass true to enable exponential backoff

int connect(string $host, int $port = 1883, int $keepalive = 60, string|null $interface = null)

Connect to an MQTT broker.

Parameters

string $host

Hostname to connect to

int $port

Optional. Port number to connect to. Defaults to 1883.

int $keepalive

Optional. Number of sections after which the broker should PING the client if no messages have been received.

string|null $interface

Optional. The address or hostname of a local interface to bind to for this connection.

Return Value

int

disconnect()

Disconnect from the broker. No parameters.

onConnect(callable $callback)

Set the connect callback. This is called when the broker sends a CONNACK message in response to a connection.

(int) $rc, (string) $message function ($rc, $message) }

Response codes: 0 = Success 1 = Connection refused (unacceptable protocol version) 2 = Connection refused (identifier rejected) 3 = Connection refused (broker unavailable) 4-255 = Reserved for future use

Parameters

callable $callback

onDisconnect(callable $callback)

Set the disconnect callback. This is called when the broker has received the DISCONNECT command and has disconnected the client.

(int) $rc function ($rc) }

Response codes: 0 = requested by client <0 = indicates an unexpected disconnection.

Parameters

callable $callback

onLog(callable $callback)

Set the logging callback.

(int) $level, (string) $str function ($level, $str) }

Log levels: Client::LOG_DEBUG Client::LOG_INFO Client::LOG_NOTICE Client::LOG_WARNING Client::LOG_ERR

Parameters

callable $callback

onSubscribe(callable $callback)

Set the subscribe callback. This is called when the broker responds to a subscription request.

(int) $mid, (int) $qosCount function ($mid, $qosCount) }

Parameters

callable $callback

onUnsubscribe(callable $callback)

Set the unsubscribe callback. This is called when the broker responds to a unsubscribe request.

(int) $mid function ($mid) }

Parameters

callable $callback

onMessage(callable $callback)

Set the message callback. This is called when a message is received from the broker.

(object) $message function (Mosquitto\Message $message) }

Parameters

callable $callback

onPublish(callable $callback)

Set the publish callback. This is called when a message is published by the client itself.

Warning: this may be called before the method publish returns the message id, so, you need to create a queue to deal with the MID list.

(int) $mid - the message id returned by publish function ($mid) }

Parameters

callable $callback

setMaxInFlightMessages(int $maxInFlightMessages)

Set the number of QoS 1 and 2 messages that can be “in flight” at one time. An in flight message is part way through its delivery flow. Attempts to send further messages with publish will result in the messages being queued until the number of in flight messages reduces.

Set to 0 for no maximum.

Parameters

int $maxInFlightMessages

setMessageRetry(int $messageRetryPeriod)

Set the number of seconds to wait before retrying messages. This applies to publishing messages with QoS > 0.

May be called at any time.

Parameters

int $messageRetryPeriod

The retry period

int publish(string $topic, string $payload, int $qos = 0, bool $retain = false)

Publish a message on a given topic.

Return the message ID returned by the broker. Warning: the message ID is not unique.

Parameters

string $topic

The topic to publish on

string $payload

The message payload

int $qos

Integer value 0, 1 or 2 indicating the QoS for this message

bool $retain

If true, retain this message

Return Value

int

int subscribe(string $topic, int $qos)

Subscribe to a topic.

Return the message ID of the subscription message, so this can be matched up in the onSubscribe callback.

Parameters

string $topic
int $qos

Return Value

int

int unsubscribe(string $topic, int $qos)

Unsubscribe from a topic.

Return the message ID of the subscription message, so this can be matched up in the onUnsubscribe callback.

Parameters

string $topic
int $qos

Return Value

int

loop(int $timeout = 1000)

The main network loop for the client. You must call this frequently in order to keep communications between the client and broker working. If incoming data is present it will then be processed. Outgoing commands, from e.g. publish, are normally sent immediately that their function is called, but this is not always possible.

loop will also attempt to send any remaining outgoing messages, which also includes commands that are part of the flow for messages with QoS > 0.

Parameters

int $timeout

Optional. Number of milliseconds to wait for network activity. Pass 0 for instant timeout.

loopForever(int $timeout = 1000)

Call loop() in an infinite blocking loop. Callbacks will be called as required. This will handle reconnecting if the connection is lost. Call disconnect in a callback to disconnect and return from the loop. Alternatively, call exitLoop to exit the loop without disconnecting. You will need to re-enter the loop again afterwards to maintain the connection.

Parameters

int $timeout

Optional. Number of milliseconds to wait for network activity. Pass 0 for instant timeout.

exitLoop()

Exit the loopForever event loop without disconnecting. You will need to re-enter the loop afterwards in order to maintain the connection.