Member 13702159 Ответов: 0

Как получить ответ от сервера веб-сокетов


Я создал клиент веб сокета с помощью этой библиотеки

https://github.com/TooTallNate/Java-WebSocket/blob/master/src/main/example/ExampleClient.java

Не могли бы вы сказать мне, как я могу остановить основной поток и получить правильное значение serverResponse?

Мой код:

class MySocketClient extends WebSocketClient {

String serverResponse;

public void onMessage( String message ) {


             serverResponse = message; 
		
	}
}

class A {

public String f () {


   MySocketClient c = new MySocketClient( new URI(...));
   c.connect();

   c.send("request");

  return c.serverResponse;  // I see null here because this line is executed before the line from onMessage method
   
}
}


Что я уже пробовал:

Я пытался использовать семафор он работает но это хорошая практика чтобы решить проблему таким образом ?

0x01AA

Непонятно, по крайней мере для меня
"когда я попытался использовать release внутри другого метода и вызвать этот метод внутри onMessage...":
Какой метод вы имеете в виду здесь "вызовите этот метод внутри"?

Кстати: для меня это то, как все работает. Вы получаете ответ в onMessage.

Member 13702159

Я изложил свою проблему более ясно.
"serverResponse" имеет значение null, когда я возвращаю это в методе "f", я ожидаю значение от переменной "message".

0x01AA

Да, это не редкость, что ответ в методе "f" равен нулю, потому что вы должны обратить внимание, что ему нужно некоторое время, чтобы получить ответ от сервера.

Ваш подход (который вы, к сожалению, удалили) с семафором-это правильное направление. Я не знаю java, поэтому не уверен, что семафор-это правильный/эффективный способ, например, в Windows я бы использовал события, но то, как вы пошли с семафором, заканчивается тем же результатом.

0 Ответов