安卓MQTT代理

12
有人知道有没有在安卓手机上运行的MQTT代理吗?我尝试了谷歌搜索但是没有找到,应用商店中只有一个下载量仅为10次的应用程序,不确定它的效果如何。

你为什么想在Android上运行MQTT代理? - Christian Götz
我正在从事一个项目,可能需要多个电话客户端使用MQTT相互通信。同类型的客户端通过外部MQTT代理彼此交流,因此从重用角度和要求它们通过MQTT通信而言,我(认为我)确实需要一个MQTT代理。 - Branex
4个回答

19

将这些依赖项添加到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'
}

并使用

io.moquette.server.Server server = new io.moquette.server.Server();
server.startServer();

启动代理服务器。默认 URI 为 tcp://localhost:1883

对我来说,server.startServer(); 报错了,因为它无法创建文件 BrokerConstants.DEFAULT_MOQUETTE_STORE_MAP_DB_FILENAME。 所以,我使用下面的代码更改了 BrokerConstants.DEFAULT_MOQUETTE_STORE_MAP_DB_FILENAME 的目标位置,并且这对我起作用了。

     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);
    server.startServer(memoryConfig); 
        // server.startServer();//is not working due to DEFAULT_MOQUETTE_STORE_MAP_DB_FILENAME; 
        Log.d(TAG,"Server Started");
         }
         catch (IOException e) { e.printStackTrace(); }
         catch (Exception e){ e.printStackTrace(); }

同时在安卓设备上使用Paho库。

compile 'org.eclipse.paho:org.eclipse.paho.client.mqttv3:1.1.0'
compile 'org.eclipse.paho:org.eclipse.paho.android.service:1.1.1'
创建一个客户端并连接到 tcp://localhost:1883,订阅一个主题并开始发布和接收消息。使用Androidmoquette库。

1
我已经尝试了这个,但是它一直在崩溃我的应用程序而没有显示任何错误。您能帮我解决这个问题吗? - Dhruv Marwha
现在它不会导致应用程序崩溃,但是无法连接到服务器。我该如何在tcp://localhost:1883上启动服务器? - Dhruv Marwha
1
使用以下代码 io.moquette.server.Server server = new io.moquette.server.Server(); server.startServer(); 来启动服务,请在服务或线程中运行此代码。 - Tej
@DhruvMarwha 在这里可以访问 - https://play.google.com/store/apps/details?id=server.com.mqtt - anshulkatta
你好@Tej,我的意思是虽然它工作得很好,但我无法从Android应用程序外部访问我的Android代理。我能够在代理应用程序内创建客户端,无论是使用本地主机还是手动设备IP进行访问,都可以正常工作,但是当我尝试从Android设备外部访问时,我遇到了连接被拒绝或连接超时的问题,请问您能否解释一下? - umer sufyan
显示剩余4条评论

7

1
为什么这个答案被踩了?因为他自己做了这个应用程序吗?在我看来,这个答案完美地回答了原问题。我现在正在尝试这个应用程序。 - javirs
1
你能在Github上分享代码并将其开源吗?这将非常有用。谢谢。 - RaghavPai
1
+1 开源代码。这是一个很棒的应用,感谢你的建设。如果没有互联网,则IP地址为0.0.0.0:1883。我认为这很有道理,但如果我有其他设备通过热点连接到手机,则希望IP地址为192.168.43.1:1883,其中192.168.43.1是热点的默认IP地址。此IP地址有时可能会被手机制造商更改。 - ranganath111
@anshulkatta: 你的应用程序是基于Moquette库构建的吗? - undefined

3

您可以在Termux终端中运行mosquitto mqtt代理。

  • 使用例如F-Droid安装Termux
  • 打开/运行Termux终端模拟器
  • 安装mosquitto

    pkg install mosquitto

  • 在终端内启动mosquitto

    mosquitto

就是这样了。该服务器将侦听默认端口1883。 配置请参见mosquitto


这个问题非常明确,它是关于在Android智能手机上运行的MQTT代理。 - Cassio Landim

2

你能否帮忙使用Moquette为Android制作一个示例应用程序? - Gaurav

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接