Ich habe diese code verwendet, um den Websocket-Client in Java zu schreiben. Es ist eine sichere Steckdose. Die Verbindung zum Ziel wird hergestellt, aber onMessage wird nicht aufgerufen.Java WebSocket: onMessage wird nicht ausgelöst
Wenn ich die gleiche Sache in Java Script schreibe es funktioniert und in der Lage, Antwort zu bekommen.
Bitte überprüfen Sie meinen Code und beraten, was ich hier vermisse.
Mein Code:
@ClientEndpoint
public class MyClientEndpoint {
@SuppressWarnings("unchecked")
@OnOpen
public void onOpen(Session session) {
System.out.println("Connected to endpoint: " + session.getBasicRemote());
try {
JSONObject obj = new JSONObject();
obj.put("subscribe", URLEncoder.encode("xxxxxxx","UTF-8"));
String msg = obj.toJSONString();
System.out.println("Sending message to endpoint: " + msg);
session.getBasicRemote().sendText(msg);
} catch (Exception ex) {
Logger.getLogger(MyClientEndpoint.class.getName()).log(Level.SEVERE, null, ex);
}
}
@OnMessage
public void onMessage(String message) {
System.out.println("Received message in client: " + message);
Client.messageLatch.countDown();
}
public class Client {
final static CountDownLatch messageLatch = new CountDownLatch(1);
public static void main(String[] args) {
try {
WebSocketContainer container = ContainerProvider.getWebSocketContainer();
String uri = "wss://api.....";
System.out.println("Connecting to:: " + uri);
container.connectToServer(MyClientEndpoint.class, URI.create(uri));
messageLatch.await(10, TimeUnit.SECONDS);
} catch (DeploymentException | InterruptedException | IOException ex) {
Logger.getLogger(Client.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
Sie können in Ihrem '@ OnMessage' die' Session session' Argument fehlen. Die Signatur sollte 'public void myMethod (Sitzungssitzung, String-Nachricht) sein;' – Al1
Mit Sitzungssitzung als erstes Argument der Methode versucht, funktioniert aber immer noch nicht. –