Hello all,
I have a jMqtt broker running on a server. Several tablets with a b4a App connect to this broker and publish and subscribe messages correctly.
I want to go a step forward and also provide a web page that could connect to this broker and receive messages from the tablets, for this purpose i'm working on a Blazor Webassembly solution, i have added the Mqtt.Net library. But i have found that, the client connects successfully only from the server side with tcp connection, but can't make messages to trigger and pass messages to the client/frontend side. On another approach i found that browsers/client side only can connect to mqttbroker with websockets, i tested the connection with websocket with a third-party cloudmqtt and it works correctly.
Maybe its important to mention that the web page would be hosted at the same place/server where mqttbroker is running.
In this old thread: https://www.b4x.com/android/forum/threads/mqttbroker.61548/page-2#post-430232 , Erel mentioned that the broker can also work with websockets, so the question is how to connect from a web page to the mqttbroker with websocket?.
I have tried so far many combinations with no luck, with tcp, no tcp, with tls, with no tls.:
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
MqttWebsocket is my server url and port the one mqtt is running 51041.
And in the debug logs when running the b4jbroker:
	
	
	
	
	
	
	
		
			
			
			
			
			
		
	
	
	
		
	
	
		
	
So it looks like the websocket port is disabled, there is a way to enable it?
Maybe someone knows a workaround to accomplish this ??.
Any help would be highly appreciated, or put me in the right direction.
Many thanks all in advance!
Ángel
			
			I have a jMqtt broker running on a server. Several tablets with a b4a App connect to this broker and publish and subscribe messages correctly.
I want to go a step forward and also provide a web page that could connect to this broker and receive messages from the tablets, for this purpose i'm working on a Blazor Webassembly solution, i have added the Mqtt.Net library. But i have found that, the client connects successfully only from the server side with tcp connection, but can't make messages to trigger and pass messages to the client/frontend side. On another approach i found that browsers/client side only can connect to mqttbroker with websockets, i tested the connection with websocket with a third-party cloudmqtt and it works correctly.
Maybe its important to mention that the web page would be hosted at the same place/server where mqttbroker is running.
In this old thread: https://www.b4x.com/android/forum/threads/mqttbroker.61548/page-2#post-430232 , Erel mentioned that the broker can also work with websockets, so the question is how to connect from a web page to the mqttbroker with websocket?.
I have tried so far many combinations with no luck, with tcp, no tcp, with tls, with no tls.:
			
				C#:
			
		
		
		MqttClientOptions mqttClientOptions;
            string wss = mqttWebSocket + ":" + mqttPort;
            
            if (conTCP == true)
            {
                if (conTls == true)
                {
                    mqttClientOptions = new MqttClientOptionsBuilder().WithTcpServer(mqttWebSocket, Convert.ToInt32(mqttPort)).WithCleanSession(true).WithCredentials(mqttUser, mqttPass).WithClientId(clientid).WithWillTopic("conexion/" + clientid).WithWillPayload("Offline").WithWillRetain(true).WithWillQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce).WithTls().Build();
                }
                else
                {
                    mqttClientOptions = new MqttClientOptionsBuilder().WithTcpServer(mqttWebSocket, Convert.ToInt32(mqttPort)).WithCleanSession(true).WithCredentials(mqttUser, mqttPass).WithClientId(clientid).WithWillTopic("conexion/" + clientid).WithWillPayload("Offline").WithWillRetain(true).WithWillQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce).Build();
                }
            }
            else
            {
                if (conTls == true)
                {
                    mqttClientOptions = new MqttClientOptionsBuilder().WithWebSocketServer(wss).WithCleanSession(true).WithCredentials(mqttUser, mqttPass).WithClientId(clientid).WithWillTopic("conexion/" + clientid).WithWillPayload("Offline").WithWillRetain(true).WithWillQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce).WithTls().Build();
                }
                else
                {
                    mqttClientOptions = new MqttClientOptionsBuilder().WithWebSocketServer(wss).WithCleanSession(true).WithCredentials(mqttUser, mqttPass).WithClientId(clientid).WithWillTopic("conexion/" + clientid).WithWillPayload("Offline").WithWillRetain(true).WithWillQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce).Build();
                }
            }
            MqttServicio.Init(clientid, mqttClientOptions);
            MqttServicio.MessageReceived += MqttClient_MessageReceived;
            MqttServicio.Connected += MqttClient_Connected;
            MqttServicio.Disconnected += MqttClient_Disconnected;
            var result = await MqttServicio.Connect();MqttWebsocket is my server url and port the one mqtt is running 51041.
And in the debug logs when running the b4jbroker:
			
				B4X:
			
		
		
		Configuring message interceptors...
Initializing broker interceptor. InterceptorIds=[]
Using default SSL context creator
Invoking constructor with io.moquette.broker.config.IConfig argument. ClassName=anywheresoftware.b4j.objects.MqttBroker$B4XAuthenticator, interfaceName=io.moquette.broker.security.IAuthenticator
Authorizator policy io.moquette.broker.security.PermitAllAuthorizatorPolicy instance will be used
Initializing CTrie
Initializing subscriptions store...
Netty is using NIO
Server bound to host=0.0.0.0, port=51044, protocol=TCP MQTT
Property websocket_port has been setted to disabled. Websocket MQTT will be disabled
Moquette integration has been started successfully in 1182 msSo it looks like the websocket port is disabled, there is a way to enable it?
Maybe someone knows a workaround to accomplish this ??.
Any help would be highly appreciated, or put me in the right direction.
Many thanks all in advance!
Ángel