使用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(); } }