弄个测试用的TCP和MQTT服务

本文最后更新于 2024年6月25日 早上

手里有个CAT.1设备需要用两种通讯上传不同的数据,这两种方式都还是得实实在在建立连接,于是就找找有没有啥省事儿的搭建方式,让在没有服务器开发的时候能自己调试下。

前言

本地肯定是没法搭建的,插4G卡的设备没法用局域网服务,得在有公网IP的地方搭建。找来找去都没啥便宜的,然后发现了移动云可以白嫖一个月,就选择它了。。。但是啊,如果你想一直用千万别进这巨坑,控制台交互shi一样。

1 TCP服务

1.1 环境

想都没想,肯定用python。

  • 安装python3
  • 安装git

1.2 使用simpletcp

python是直接有TCP的包,但是嘛,习惯性github先搜索一下,找到了这个,直接用岂不更好,懒癌。

1
git clone https://github.com/fschr/simpletcp.git

进入文件夹,安装下

1
python3 setup.py install

然后直接进入/examples/echo里面,有两个例程,我们要用server.py这个
vim进去后就改一下IP地址或者端口就好,注意一下是,租的服务器IP地址不是独享的话,是需要填写它的内网地址的。

1
2
3
4
5
6
7
import queue
from simpletcp.tcpserver import TCPServer
def echo(ip, queue, data):
queue.put(data)
print(data)
server = TCPServer("192.168.2.1", 5000, echo)
server.run()

使用python运行启动

1
python3 server.py

控制阻塞等待接收,来一个消息显示一个,我就是用来调试的,这样就可以咯。

1.3 测试一下

在本地重复上面的操作,但是最后要使用的是client例程,修改文件中的IP地址和端口为服务器,这儿始终填写服务器的外网IP。

1
2
3
4
from simpletcp.clientsocket import ClientSocket

s1 = ClientSocket("192.168.2.1", 5000, single_use=False)
response = s1.send("Hello, World!")

运行,不会阻塞,此时服务端收到消息:

1.4 一些开源工具

tcp_udp_web_tools
网络调试助手

2 MQTT服务器

2.1 方案一

直接使用开发服务器

1
2
3
4
5
Broker: broker.emqx.io
TCP 端口: 1883
Websocket 端口: 8083
TCP/TLS 端口: 8883
Websocket/TLS 端口: 8084

2.2 方案二

自己的服务器上安装开源的EMQ X Broker
开源物联网MQTT消息中间件

2.2.1 docker

安装docker

1
2
3
apt-get update
apt-get install docker
apt-get install docker-compose

获取镜像

1
docker pull emqx/emqx:4.3.3

启动

1
docker run -d --name emqx -p 1883:1883 -p 8081:8081 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx:4.3.3

2.3 测试

2.3.1 测试方式一

mqtt免费测试客户端
点击加号创建一个客户端,在弹出框中填写名称,修改服务器地址,其他按需更改。
点击右上角连接,然后点击添加订阅,按需修改topic和QoS,点击确定。此时就开始接收订阅的数据了。
在右下角可以输出topic和消息来发布。该界面可以通过创建两个客户端来互相通信测试MQTT服务器是否搭建好。

2.3.2 测试方式二

也可以通过Mosquitto,先看看程序是否启动了

1
ps -aux | grep mosquitto

打开接收

1
mosquitto_sub -d -h 192.168.2.1 -t 'fff' -v

再使用发送

1
mosquitto_pub -t 'FFF' -h 192.168.2.1 -m '12345' -p 1883

接收端能收到消息

IP地址处可以填写域名,注意服务器需要在安全组中设置流入流出。

  • mosquitto_pub发布主题的参数
参数 说明
-d 打印debug信息
-f 将指定文件的内容作为发送消息的内容
-h 指定要连接的域名 默认为localhost
-i 指定要给哪个clientId的用户发送消息
-l 指定给哪个clientId前缀的用户发送消息
-m 消息内容
-n 发送一个空(null)消息
-p 连接端口号
-q 指定QoS的值(0,1,2)
-t 指定topic
-u 指定broker访问用户
-P 指定broker访问密码
-V 指定MQTT协议版本
  • mosquitto_sub订阅主题的参数
参数 说明
-d 打印debug信息
-h 指定要连接的域名 默认为localhost
-i 指定要给哪个clientId的用户发送消息
-l 指定给哪个clientId前缀的用户发送消息
-k keepalive 每隔一段时间,发PING消息通知broker,仍处于连接状态。 默认为60秒。
-q 指定希望接收到QoS为什么的消息 默认QoS为0
-R 不显示陈旧的消息
-t 订阅topic
-v 打印信息

弄个测试用的TCP和MQTT服务
https://blog.kala.love/posts/3b2913d3/
作者
久远·卡拉
发布于
2021年6月26日
许可协议