Beispiel https://github.com/spring-projects/spring-integration-samples/tree/master/basic/tcp-client-server ist großartig, um eine TCP-Server-Anwendung zu erstellen. Es ist einfach und läuft auf JVM. Es benötigt keinen Anwendungsserver.So führen Sie den TCP-Server aus, bis er gestoppt wird
Beispiel verwendet Befehlszeileneingabe, um das Programm auszuführen. Ich möchte, dass der Server Daten nur vom Socket-Port und nicht über die Befehlszeile akzeptiert. Wenn ich die Eingabe der Befehlszeile entferne, wird der Haupt-Thread beendet und das Programm akzeptiert keine Eingabe mehr vom Port. Ich muss den Hauptfaden die ganze Zeit laufen lassen.
ich einige etwas wie dieses denke:
boolean isGatewayStopped = false;
while (!isGatewayStopped) {
try {
Thread.sleep(5000);
isGatewayStopped = getGatewayStatus();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
Ich habe zwei Fragen:
ist es eine saubere Art und Weise weiterhin der Haupt-Thread laufen zu machen?
Woher weiß man, dass das Gateway gestoppt ist? Wenn der Benutzer TCP-Daten als "Quit" sendet, kann das Gateway gestoppt werden. Gibt es eine Möglichkeit zu wissen, dass Gateway gestoppt ist?
Dank
Ich möchte keine Eingabe von der Befehlszeile nehmen, weil es ein Server ist. Gibt es im Frühjahr ein Dienstprogramm, das den Daemon-Thread starten und den Status des Gateways abfragen kann? – kevin
Sehen Sie ein EDIT in meiner Antwort. –
Das ist perfekt Artem. schnelle Frage: Siehe https://github.com/spring-projects/spring-integration-samples/tree/master/intermediate/monitoring für die Verwendung von Control-Channel. Nachricht operation = MessageBuilder.withPayload ("@ integrationMBeanExporter.stopActiveComponents (false, 20000)"). Build(); if (this.exporter! = Null) { \t this.controlBusChannel.send (Operation); } Wenn ich stopActiveComponents() über den Steuerkanal sende, wird ContextClosedEvent gesendet? –
kevin