协议使用情况
1. 基础通信(BASIC)- MQTT over TCP
配置:
BASIC:
protocol: MQTT # @see com.dji.sample.component.mqtt.model.MqttProtocolEnum
host: Please enter your ip.
port: 1883
username: JavaServer
password: 123456
client-id: 123456
# If the protocol is ws/wss, this value is required.
path:
- 协议:
MQTT→ 实际地址:tcp://host:1883 - 传输层:TCP
- 用途:常规通信(services、events、requests、state、osd 等)
2. 无人机控制(DRC)- MQTT over WebSocket
配置:
DRC:
protocol: WS # @see com.dji.sample.component.mqtt.model.MqttProtocolEnum
host: Please enter your ip.
port: 8083
path: /mqtt
username: JavaServer
password: 123456
- 协议:
WS→ 实际地址:ws://host:8083/mqtt - 传输层:WebSocket
- 用途:实时控制(drone_control、drone_emergency_stop、heart_beat 等)
3. 协议映射关系
MQTT("tcp"),
MQTTS("ssl"),
WS("ws"),
WSS("wss");
String protocol;
MqttProtocolEnum(String protocol) {
this.protocol = protocol;
}
public String getProtocolAddr() {
return protocol + "://";
}
MQTT→tcp://(MQTT over TCP)WS→ws://(MQTT over WebSocket)MQTTS→ssl://(MQTT over TLS)WSS→wss://(MQTT over WebSocket Secure)
4. 地址构建逻辑
private static String getMqttAddress(MqttClientOptions options) {
StringBuilder addr = new StringBuilder()
.append(options.getProtocol().getProtocolAddr())
.append(options.getHost().trim())
.append(":")
.append(options.getPort());
if ((options.getProtocol() == MqttProtocolEnum.WS || options.getProtocol() == MqttProtocolEnum.WSS)
&& StringUtils.hasText(options.getPath())) {
addr.append(options.getPath());
}
return addr.toString();
}
示例:
- BASIC:
tcp://192.168.1.100:1883 - DRC:
ws://192.168.1.100:8083/mqtt
总结
- 基础通信:MQTT over TCP(
tcp://,端口 1883) - 无人机控制:MQTT over WebSocket(
ws://,端口 8083)
两者都是 MQTT 协议,只是传输层不同:
- BASIC 使用 TCP
- DRC 使用 WebSocket(便于浏览器/Web 客户端连接)
都使用 Eclipse Paho MQTT 客户端库,支持 TCP 和 WebSocket 两种传输方式。
166

被折叠的 条评论
为什么被折叠?



