如何将我的设备用作mqtt-broker?

时间:2017-11-11 20:12:31

标签: android mqtt

我的目标是在两个Android设备之间建立点对点连接。为了实现这一目标,我选择了协议mqtt。 我想在第一个设备上启动代理,第二个连接到第一个设备。我以这种方式创建了一个经纪人:

我将这些依赖项添加到gradle

dependencies {
compile 'io.moquette:moquette-netty-parser:0.8.1'
compile 'io.moquette:moquette-broker:0.8.1'
compile 'io.moquette:moquette-parser-commons:0.8.1'}

然后创建了一个服务器,但是默认URI是tcp:// localhost:1883所以只有当两个设备连接到同一个Wi-Fi点时,我才可以连接到这个代理的第二个设备。

broker = new Server();
    try {
        MemoryConfig memoryConfig = new MemoryConfig(new Properties());
        memoryConfig.setProperty(BrokerConstants.PERSISTENT_STORE_PROPERTY_NAME,
                Environment.getExternalStorageDirectory().getAbsolutePath()+ File.separator
                        + BrokerConstants.DEFAULT_MOQUETTE_STORE_MAP_DB_FILENAME);
        broker.startServer(memoryConfig);
    } catch (IOException e) {
        e.printStackTrace();
    }

我使用Paho库for android

compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
compile 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'

即使设备连接到不同的Wi-Fi点或使用3G / 4G,我也希望能够连接到代理。

老实说,我试着找了好几天的解决方案,但我没有成功。我真的不知道如何实现这一目标。 因此,我有两个问题。我有可能想做吗?怎么样?

1 个答案:

答案 0 :(得分:0)

localhost表示此计算机,因此您只能使用该URL连接到与代理相同的设备上的代理,甚至不能在同一网络/子网上。如果要连接到其他计算机,则需要知道要连接的计算机的IP地址。这会导致鸡/蛋的情况,告诉您如何找到要连接的远程设备的IP地址。

但鉴于移动网络或家庭宽带网络往往落后于NAT,将无法连接到这些设备。

托管在云服务器之类的中央代理的部分好处是所有设备都可以连接到它并通过中央代理共享信息,即使它们位于NAT网关之后。

尝试使用3G / 4G /家庭宽带进行直接对等操作是不可能的。