【问题标题】:Paho JS can't connect to Mosquitto ServerPaho JS 无法连接到 Mosquitto 服务器
【发布时间】:2015-01-19 02:50:25
【问题描述】:

当我尝试通过这个 JS 连接到 Mosquitto 服务器时,我收到这个错误:

WebSocket connection to 'ws://xx.xxx.xxx.xxx:1883/mqtt' failed: Error during WebSocket handshake: net::ERR_CONNECTION_RESET 

我从控制台尝试过,它工作正常。 我尝试使用 Java 客户端作为提供者和消费者,它工作正常。 所以我不明白我应该怎么做才能让它工作。

这是JS:

client = new Paho.MQTT.Client("xx.xxx.xxx.xxx", 1883, "clientId");

client.onConnectionLost = onConnectionLost;
client.onMessageArrived = onMessageArrived;

// connect the client
client.connect({onSuccess:onConnect});

这是 Java(工作):

@Stateless
@LocalBean
public class PahoManager implements MqttCallback {

  MqttClient client;

  public void init() {
      try {
          client = new MqttClient("tcp://192.168.50.10:1883", "pahomqttpublish1");

          client.connect();
          client.subscribe("pahodemo/test");
      } catch (MqttException e) {
          e.printStackTrace();
      }
  }    

  public void doDemo()  {
    try {

      MqttMessage message = new MqttMessage();
      message.setPayload("Ciao Pluto".getBytes());
      client.publish("pahodemo/test", message);

      //client.disconnect();
    } catch (MqttException e) {
      e.printStackTrace();
    }
  }

    @Override
    public void connectionLost(Throwable thrwbl) {
        System.out.println("Connection Lost");
    }

    @Override
    public void messageArrived(String string, MqttMessage mm) throws Exception {
        System.out.println("Message: " + string + mm);
    }

    @Override
    public void deliveryComplete(IMqttDeliveryToken imdt) {
        System.out.println("Message delivered");
    }
}

【问题讨论】:

  • 你的 websockets 服务器运行了吗? mosquitto 目前没有内置对 websockets 的支持。

标签: message-queue mqtt messagebroker mosquitto paho


【解决方案1】:

您需要使用 Mosquitto 1.4 版才能获得 websockets 支持。这还没有发布,但你可以自己构建它。来源可在此处获得:

https://bitbucket.org/oojah/mosquitto/branch/1.4

另一个选项是运行一个 websocket 到 MQTT 桥。您可以使用此处描述的 lighttpd 模块:

http://test.mosquitto.org/ws.html

【讨论】:

  • Mosquitto 1.4 已于 2015 年 2 月发布,内置对 websockets 的支持。
【解决方案2】:

正如 hardillb 所说,mosquitto 还不支持 websockets。如果您想要原生 websocket,还有其他解决方案,例如 HiveMQ。您可以看到支持 websocket here 的代理的完整列表(您可能需要将表格滚动到右侧)。您可以在this blog post 中了解有关 MQTT over websockets 的更多信息:

请确保您连接到的 websocket 端口通常不是 1883。实际上,这意味着您的 TCP MQTT 客户端连接到端口 1883,而您的 websocket 客户端连接到另一个端口,例如8000。

通常的免责声明:我是 HiveMQ 开发人员之一,所以这个答案可能有偏见 ;-)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多