java - 宁: Connect to websocket and wait for response

标签 java websocket asynchttpclient

使用 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 以同步方式工作,这样,一旦我发送消息,它应该等待直到收到响应并继续前进!任何建议!

最佳答案

在一个对象上使用waitnotify

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/

相关文章:

java - 如何缩放和设置MediaView的坐标?

Android:无法取消异步任务

java - 如何关闭并重新配置使用 NettyAsyncHttpProvider 的 AsyncHttpClient

python - 如何在没有服务器的情况下立即执行 AsyncHTTPClient() (使用交互式解释器)

java - Groovy - 有效地将 CSV 数据映射到对象的构造函数中

java - 为什么代码在整数长度程序中跳过 for 循环

java - IntelliJ 自动完成替换后续单词

java - SOA环境下webapp的实时数据管理(远程后端)

node.js - WebSocket 服务器不适用于 SSL

c++ - Qt 本地安全网络套接字