使用 Ning 创建并连接到 Websocket,以下是我的配置,
NettyAsyncHttpProviderConfig config = new NettyAsyncHttpProviderConfig();
config.addProperty(NettyAsyncHttpProviderConfig.USE_BLOCKING_IO, "true");
AsyncHttpClientConfig.Builder builder = new AsyncHttpClientConfig.Builder()
.setAsyncHttpClientProviderConfig(config);
AsyncHttpClient client = new AsyncHttpClient(
new NettyAsyncHttpProvider(builder.build()));
AsyncHttpClient.BoundRequestBuilder requestBuilder = client.prepareGet(createUri(method))
.addHeader(HttpHeaders.Names.CONNECTION, "Upgrade")
.addHeader(HttpHeaders.Names.UPGRADE, "WebSocket");
websocket = requestBuilder.execute(new WebSocketUpgradeHandler.Builder()
.addWebSocketListener(this).build()).get();
使用websocket发送短信,
if (websocket!=null && websocket.isOpen())
websocket.sendTextMessage(jObj.toString());// send
onMessage()
监听器的方法将响应添加到列表
@Override
public void onMessage(String message) {
serverResponse.add(message);
}
发送短信后,我有格式化响应并保存结果的方法
result = responseFromServer();
private String responseFromServer() {
String response = null;
sleep(100);
if(!serverResponse.isEmpty())
//format the message which is added in list
return response;
}
问题是,如果我在上述方法中没有“sleep(100)”,对于 request1-response 为 null 而对于 request2,我得到 response1。我希望 websocket 以同步方式工作,这样,一旦我发送消息,它应该等待直到收到响应并继续前进!任何建议!
最佳答案
在一个对象上使用wait
和notify
,
synchronized (someObject){
try {
someObject.wait();
result = responseFromServer();
} catch (InterruptedException e) {
//when the object is interrupted
}
}
并在 onMessage
收到消息后通知对象,
@Override
public void onMessage(String message) {
serverResponse.add(message);
synchronized(someObject) {
someObject.notify();
}
}
关于java - 宁: Connect to websocket and wait for response,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26062751/