Как получить ответ от сервера веб-сокетов
Я создал клиент веб сокета с помощью этой библиотеки
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 я бы использовал события, но то, как вы пошли с семафором, заканчивается тем же результатом.