1. 程式人生 > >Mqtt服務器搭建

Mqtt服務器搭建

set tls greate 發布消息 鏈接庫 終端 ant lib cat

Mqtt服務器搭建

測試環境:CentOS64位

1.安裝基礎軟件

yum install gcc-c++

yum install cmake

yum install openssl-devel  //mosquitto默認支持openssl


2.下載源碼包

wget http://mosquitto.org/files/source/mosquitto-1.4.4.tar.gz

wget http://c-ares.haxx.se/download/c-ares-1.10.0.tar.gz --no-check-certificate

wget https:
//github.com/warmcat/libwebsockets/archive/v1.3-chrome37-firefox30.tar.gz

3.解壓源碼包

tar xf c-ares-1.10.0.tar.gz && mv c-ares-1.10.0 –C /usr/local/src/

tar xf v1.3-chrome37-firefox30 -C /usr/local/src/

tar xf mosquitto-1.4.4.tar.gz -C /usr/local/src/

4.編譯準備

cd /usr/local/src/mosquitto-1.4.4/

vim compiling.txt #這個文件裏有寫需要的依賴包,內容如下

The following packages are required for mosquitto:

* tcp-wrappers (optional, package name libwrap0-dev)

* openssl (version 1.0.0 or greater if TLS-PSK support is needed, can be disabled)

* c-ares (for DNS-SRV support, can be disabled)

* libuuid (from e2fsprogs, can be disabled)

* On Windows, the Redhat pthreads library is required if threading support is

to be included.

To compile, run "make", but also see the file config.mk for more details on the

various options that can be compiled in.

vim config.mk #這個文件裏包含多個選項,可以選擇自己需要的功能

常見功能說明

WITH_SRV
啟用c-areas庫,DNS查找的庫
missing ares.h
WITH_UUID     
啟用lib-uuid為每個連接客戶端生成uuid
missing uuid.h
WITH_WEBSOCKET
啟用WebSocket協議
missing libwebsockets.h

5.安裝tcp-wrappers

因為本機已經有了,所以就不安裝了

rpm –qa | grep tcp_wrap*

tcp_wrappers-7.6-57.el6.x86_64

tcp_wrappers-libs-7.6-57.el6.x86_64

6.編譯安裝c-ares

cd  /usr/local/src/c-ares-1.10.0

./configure

make

make install

 

7.安裝libuuid

yum -y install libuuid libuuid-devel

8.安裝websocket

cd /usr/local/src/libwebsockets-1.3-chrome37-firefox30/

vim README.build #參照說明文檔內容編譯安裝即內容如下

Generate the build files (default is Make files):

cd /path/to/src

mkdir build

cd build

cmake ..

(NOTE: The build/ directory can have any name and be located anywhere

on your filesystem, and that the argument ".." given to cmake is simply

the source directory of libwebsockets containing the CMakeLists.txt

project file. All examples in this file assumes you use "..")

NOTE2

A common option you may want to give is to set the install path, same

as --prefix= with autotools. It defaults to /usr/local.

You can do this by, eg

cmake .. -DCMAKE_INSTALL_PREFIX:PATH=/usr  #指定安裝路徑

NOTE3

On machines that want libraries in lib64, you can also add the

following to the cmake line

-DLIB_SUFFIX=64                  #指定64位庫

NOTE4

If you are building against a non-distro OpenSSL (eg, in order to get

access to ALPN support only in newer OpenSSL versions) the nice way to

express that in one cmake command is eg,

-DOPENSSL_ROOT_DIR=/usr/local/ssl        #指定ssl文件位置



mkdir build; cd build;

cmake .. -DLIB_SUFFIX=64

make install

9.開始安裝mosquitto服務

make && make install && echo $?

默認文件路徑

/usr/local/sbin mosquitto server
/etc/mosquitto configure
/usr/local/bin utility command

10.修改鏈接庫

由於操作系統版本及架構原因,很容易出現安裝之後的鏈接庫無法被找到,如啟動mosquitto客戶端可能出現找不到libmosquitto.so.1文件,因此需要添加鏈接庫路徑

ln -s /usr/local/lib/libmosquitto.so.1 /usr/lib/libmosquitto.so.1

ldconfig

否則會出現註意的錯誤

error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory

還有一些編譯時可能會遇到的錯誤

mosquitto.c:871: error: ‘struct mosquitto’ has no member named ‘achan’

如果不使用可以在config.mk 把WITH_SRV功能關閉即可

 

其他問題也差不多,基本就是缺少相應的依賴包,解決辦法兩個

1在config.mk關閉相關選項

2 把依賴包裝上

嫌麻煩可以直接yum install mosquitto mosquitto-clients –y一句話搞定上面所有

開始測試

1.添加組和用戶

groupadd mosquitto

useradd –g mosquitto mosquitto

2.啟用,備份和編輯配置文件

cp /etc/mosquitto/mosquitto.conf.example /etc/mosquitto/mosquitto.conf  #配置文件如下

# 服務進程的PID

#pid_file /var/run/mosquitto.pid

# 服務進程的系統用戶

#user mosquitto

# 服務綁定的IP地址

#bind_address

# 服務綁定的端口號

#port 1883

# 允許的最大連接數,-1表示沒有限制

#max_connections -1

# 允許匿名用戶

#allow_anonymous true


可以參考官網說明http://mosquitto.org/man/mosquitto-conf-5.html


技術分享

配置代理:

打開一個終端叫B,在B裏開啟代理服務

mosquitto -c /etc/mosquitto/mosquitto.conf –d

技術分享

技術分享

再打開一個終端叫A,A裏充當訂閱者,輸入如下命令

mosquitto --help

這裏報錯了

mosquitto_sub: error while loading shared libraries: libcares.so.2: cannot open shared object file: No such file or directory

原因:找不到libcares.so.2庫文件

vim /etc/ld.so.conf.d/qt-x86_64.conf

添加下面兩行

/usr/local/lib64

/usr/local/lib

ldconfig

mosquitto_sub -t goodafternoon   #訂閱good_afternoon
 

再打開一個終端叫C,在C裏執行如下命令

發布消息

mosquitto_pub -t goodafternoon -m "hello world"

可以在代理B端上看到連接日誌

1494420735: New connection from ::1 on port 1883.

1494420735: New client connected from ::1 as mosqsub/23455-demon-cli (c1, k60).

1494420850: New connection from ::1 on port 1883.

1494420850: New client connected from ::1 as mosqpub/23456-demon-cli (c1, k60).

1494420850: Client mosqpub/23456-demon-cli disconnected.

而在訂閱A端可以收到hello world這條消息!!

技術分享

本文參考http://www.cnblogs.com/littleatp/p/4835879.html

Mqtt服務器搭建