This repository contains the source code for the Eclipse Paho MQTT C++ client library on memory-managed operating systems such as Linux/Posix and Windows.
This code builds a library which enables C++11 applications to connect to an MQTT broker, publish messages to the broker, and to subscribe to topics and receive published messages.
The library has the following features:
This code requires the Paho C library by Ian Craggs, et al., specifically version 1.3.8 or possibly later.
To keep up with the latest announcements for this project, or to ask questions:
Twitter: @eclipsepaho and @fmpagliughi
EMail: Eclipse Paho Mailing List
Mattermost: Eclipse Mattermost Paho Channel
ssl_options
not handling CA path.This release brings in some missing MQTT v5 features, support for websocket headers and proxies, ALPN protocol lists, adds the builder pattern for options, and fixes a number of bugs in both the C++ library and the underlying C lib.
Requires Paho C v1.3.8
create_options
that can be used to construct a client with new features:
create_options_builder
, connect_options_builder
, message_ptr_builder
, etc.mqtt::exception
base class.on_disconnected
callback to handle receipt of disconnect packet from server.reconnect()
was hanging forever, even when successful. In addition several of the synchronous client
calls were hanging forever on failure. They now properly throw a timeout_error
exception.Unit tests were converted to use Catch2 for the test framework.
Catch2 can be found here: Catch2
Contributions to this project are gladly welcomed and appreciated Before submitting a Pull Request, please keep three things in mind:
For full details, see CONTRIBUTING.md.
CMake is a cross-platform build system suitable for Unix and non-Unix platforms such as Microsoft Windows. It is now the only supported build system.
The Paho C++ library requires the Paho C library, v1.3.8 or greater, to be built and installed first. More information below.
CMake allows for options to direct the build. The following are specific to Paho C++:
Variable | Default Value | Description |
---|---|---|
PAHO_BUILD_SHARED | TRUE (Linux), FALSE (Win32) | Whether to build the shared library |
PAHO_BUILD_STATIC | FALSE (Linux), TRUE (Win32) | Whether to build the static library |
PAHO_BUILD_DOCUMENTATION | FALSE | Create and install the HTML based API documentation (requires Doxygen) |
PAHO_BUILD_SAMPLES | FALSE | Build sample programs |
PAHO_BUILD_TESTS | FALSE | Build the unit tests. (This requires Catch2) |
PAHO_WITH_SSL | TRUE (Linux), FALSE (Win32) | Flag that defines whether to build ssl-enabled binaries too |
PAHO_BUILD_DEB_PACKAGE | FALSE | Flag that configures cpack to build a Debian/Ubuntu package |
In addition, the C++ build might commonly use CMAKE_PREFIX_PATH
to help the build system find the location of the Paho C library.
On *nix systems CMake creates Makefiles.
The build process currently supports a number of Unix and Linux flavors. The build process requires the following tools:
On Debian based systems this would mean that the following packages have to be installed:
$ sudo apt-get install build-essential gcc make cmake cmake-gui cmake-curses-gui
If you will be using secure sockets (and you probably should):
$ sudo apt-get install libssl-dev
Building the documentation requires doxygen and optionally graphviz to be installed:
$ sudo apt-get install doxygen graphviz
Unit tests are being built using Catch2.
Catch2 can be found here: Catch2. You must download and install Catch2 to build and run the unit tests locally.
Before building the C++ library, first, build and install the Paho C library, if not already present. Note, this version of the C++ library requires Paho C v1.3.8 or greater.
$ git clone https://github.com/eclipse/paho.mqtt.c.git
$ cd paho.mqtt.c
$ git checkout v1.3.8
$ cmake -Bbuild -H. -DPAHO_ENABLE_TESTING=OFF -DPAHO_BUILD_STATIC=ON \
-DPAHO_WITH_SSL=ON -DPAHO_HIGH_PERFORMANCE=ON
$ sudo cmake --build build/ --target install
$ sudo ldconfig
This builds with SSL/TLS enabled. If that is not desired, omit the -DPAHO_WITH_SSL=ON
.
It also uses the "high performace" option of the C library to disable more extensive internal memory checks. Remove the PAHO_HIGH_PERFORMANCE option (i.e. turn it off) to debug memory issues, but for most production systems, leave it on for better performance.
To install the library to a non-standard location, use the CMAKE_INSTALL_PREFIX
to specify a location. For example, to install into under the build directory, perhaps for local testing, do this:
$ cmake -Bbuild -H. -DPAHO_ENABLE_TESTING=OFF -DPAHO_BUILD_STATIC=ON \
-DPAHO_WITH_SSL=ON -DPAHO_HIGH_PERFORMANCE=ON \
-DCMAKE_INSTALL_PREFIX=./build/_install
An example CMake build session might look like this:
$ git clone https://github.com/eclipse/paho.mqtt.cpp
$ cd paho.mqtt.cpp
$ cmake -Bbuild -H. -DPAHO_BUILD_STATIC=ON \
-DPAHO_BUILD_DOCUMENTATION=TRUE -DPAHO_BUILD_SAMPLES=TRUE
$ sudo cmake --build build/ --target install
$ sudo ldconfig
If you did not install Paho C library to a default system location or you want to build against a different version, use the CMAKE_PREFIX_PATH
to specify its install location. Perhaps something like this:
$ cmake -Bbuild -H. -DPAHO_BUILD_DOCUMENTATION=ON -DPAHO_BUILD_SAMPLES=ON \
-DPAHO_BUILD_STATIC=ON \
-DCMAKE_PREFIX_PATH=$HOME/mqtt/paho.mqtt.c/build/_install
To use another compiler, either the CXX environment variable can be specified in the configuration step:
$ CXX=clang++ cmake ..
or the CMAKE_CXX_COMPILER
flag can be used:
$ cmake -DCMAKE_CXX_COMPILER=clang++
$ cmake -Bbuild -H. -DPAHO_WITH_SSL=ON -DPAHO_ENABLE_TESTING=OFF -DPAHO_BUILD_DEB_PACKAGE=ON
$ cmake --build build
$ (cd build && cpack)
will generate a .deb
file.
On Windows systems CMake creates Visual Studio project files.
The build process currently supports a number Windows versions. The build process requires the following tools:
First install and open the cmake-gui application. This tutorial is based on cmake-gui 3.5.2.
Second, select the path to the Paho MQTT C library (CMAKE_PREFIX_PATH) if not installed in a standard path. Remember that the Paho MQTT C must be installed on the system. Next, choose if it is supposed to build the documentation (PAHO_BUILD_DOCUMENTATION) and/or the sample applications (PAHO_BUILD_SAMPLES).
Once the configuration is done, click on the Configure button, select the version of the Visual Studio, and then click on Generate button.
At the end of this process you have a Visual Studio solution.
Alternately, the libraries can be completely built at an MSBuild Command Prompt. Download the Paho C and C++ library sources, then open a command window and first compile the Paho C library:
> cd paho.mqtt.c
> cmake -Bbuild -H. -DCMAKE_INSTALL_PREFIX=C:\mqtt\paho-c
> cmake --build build/ --target install
Then build the C++ library:
> cd ..\paho.mqtt.cpp
> cmake -Bbuild -H. -DCMAKE_INSTALL_PREFIX=C:\mqtt\paho-cpp -DPAHO_BUILD_SAMPLES=ON -DPAHO_WITH_SSL=OFF -DCMAKE_PREFIX_PATH=C:\mqtt\paho-c
> cmake --build build/ --target install
This builds and installs both libraries to a non-standard location under C:\mqtt
. Modify this location as desired or use the default location, but either way, the C++ library will most likely need to be told where the C library was built using CMAKE_PREFIX_PATH
.
It seems quite odd, but even on a 64-bit system using a 64-bit compiler, MSVC seems to default to a 32-bit build target.
The 64-bit target can be selected using tge CMake generator switch, -G, at configuration time. The full version must be provided. For Visual Studio 2015 which is v14 do this to first build the Paho C library:
> cmake -G "Visual Studio 14 Win64" -Bbuild -H. -DCMAKE_INSTALL_PREFIX=C:\mqtt\paho-c
...
Then use it to build the C++ library:
> cmake -G "Visual Studio 14 Win64" -Bbuild -H. -DCMAKE_INSTALL_PREFIX=C:\mqtt\paho-cpp -DPAHO_WITH_SSL=OFF -DCMAKE_PREFIX_PATH=C:\mqtt\paho-c
...
Note that it is very important that you use the same generator (target) to build BOTH libraries, otherwise you will get lots of linker errors when you try to build the C++ library.
The library supports connecting to an MQTT server/broker using TCP, SSL/TLS, and websockets (secure and unsecure). This is chosen by the URI supplied to the connect() call. It can be specified as:
"tcp://<host>:<port>" - TCP (unsecure)
"ssl://<host>:<port>" - SSL/TLS
"ws://<host>:<port>" - Unsecure websockets
"wss://<host>:<port>" - Secure websockets
Note that to use "ssl://" or "wss://" you must compile the library with OpenSSL, and you must supply a set of ssl_options
with the connect_options
.
Sample applications can be found in the source repository at src/samples: https://github.com/eclipse/paho.mqtt.cpp/tree/master/src/samples
This is a partial example of what a typical example might look like:
int main(int argc, char* argv[])
{
sample_mem_persistence persist;
mqtt::client cli(ADDRESS, CLIENT_ID, &persist);
callback cb;
cli.set_callback(cb);
auto connOpts = mqtt::connect_options_builder()
.keep_alive_interval(20);
.clean_session()
.finalize();
try {
cli.connect(connOpts);
// First use a message pointer.
mqtt::message_ptr pubmsg = mqtt::make_message(PAYLOAD1);
pubmsg->set_qos(QOS);
cli.publish(TOPIC, pubmsg);
// Now try with itemized publish.
cli.publish(TOPIC, PAYLOAD2, strlen(PAYLOAD2)+1, 0, false);
// Disconnect
cli.disconnect();
}
catch (const mqtt::persistence_exception& exc) {
cerr << "Persistence Error: " << exc.what() << " ["
<< exc.get_reason_code() << "]" << endl;
return 1;
}
catch (const mqtt::exception& exc) {
cerr << "Error: " << exc.what() << " ["
<< exc.get_reason_code() << "]" << endl;
return 1;
}
return 0;
}
The original API organization and documentation were adapted from:
The Paho Java library by Dave Locke et al. Copyright (c) 2012, IBM Corp
All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 which accompanies this distribution, and is available at http://www.eclipse.org/legal/epl-v10.html
This code requires:
The Paho C library by Ian Craggs Copyright (c) 2013-2018, IBM Corp.
All rights reserved. This program and the accompanying materials are made available under the terms of the Eclipse Public License v1.0 and Eclipse Distribution License v1.0 which accompany this distribution.
The Eclipse Public License is available at http://www.eclipse.org/legal/epl-v10.html and the Eclipse Distribution License is available at http://www.eclipse.org/org/documents/edl-v10.php.
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。