Java 프로그램이 게시자이고 nodejs 프로그램이 구독자 인 게시/가입 애플리케이션을 개발하려고합니다. Java 클라이언트는 MQTT 서버에 연결하고 임의의 데이터를 전송합니다. NodeJS 클라이언트는 Java 클라이언트가 등록한 주제에 등록해야합니다. Java 클라이언트에서 NodeJS 콘솔로 데이터를 가져오고 있지만 웹 페이지에서 비동기 적으로 해당 데이터를 인쇄해야합니다.nodejs 및 java를 비동기 적으로 사용하여 MQTT 데이터 가져 오기
다음은 작성한 코드입니다. MqttPublishSample.java
public class MqttPublishSample {
public static void main(String[] args) {
String topic = "MQTT-Examples";
String content = "HelloWorld";
int qos = 2;
int i =0;
String broker = "tcp://localhost:1883";
String clientId = "JavaSample";
MemoryPersistence persistence = new MemoryPersistence();
try {
MqttClient sampleClient = new MqttClient(broker, clientId, persistence);
MqttConnectOptions connOpts = new MqttConnectOptions();
connOpts.setCleanSession(true);
System.out.println("Connecting to broker: " + broker);
sampleClient.connect(connOpts);
System.out.println("Connected");
while(i < 100)
{
int num = (int) (Math.random() * 2);
String text = content + num;
System.out.println("Publishing message: "+content+ " "+ num);
MqttMessage message = new MqttMessage(text.getBytes());
message.setQos(qos);
sampleClient.publish(topic, message);
System.out.println("Message published");
i++;
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
// System.out.println("Publishing message: " + content);
/*sampleClient.disconnect();
System.out.println("Disconnected");
System.exit(0);*/
} catch (MqttException me) {
System.out.println("reason " + me.getReasonCode());
System.out.println("msg " + me.getMessage());
System.out.println("loc " + me.getLocalizedMessage());
System.out.println("cause " + me.getCause());
System.out.println("excep " + me);
me.printStackTrace();
}
}
}
내가 웹 페이지에 메시지를 인쇄하려고
var express = require('express');
var app = express();
app.get('/', function (req, res) {
client.on('connect', function() {
console.log("Connection Successful");
client.subscribe('MQTT-Examples');
});
var content;
client.on('message', function (topic, message) {
content = message;
console.log(message.toString());
});
res.render('index', { title: content });
});
app.listen(3000, function() {
console.log('Example app listening on port 3000!');
});
을 app.js하지만 난 모든 메시지를 볼 수 없습니다입니다. 웹 페이지의 데이터를 비동기 적으로 인쇄해야합니다. 진행 방법에 대한 도움. 감사!
이번에는 페이지가 영원히 다시로드됩니다. 그것은 심지어 콘솔에 성공적으로 연결 메시지를 인쇄하지 않습니다. 클라이언트 메소드를 실행 중인지 확실하지 않습니까? –
고마워요! 그것은 일했다 :) –