Java Websocket在对同一socket发出下一个请求之前等待响应
public WebSocket connect() throws Exception {
WebSocket ws = new WebSocketFactory().setConnectionTimeout(TIMEOUT).createSocket(SERVER)
.addListener(new WebSocketAdapter() {
public void onTextMessage(WebSocket websocket, String message) {
System.out.println(message);
}
public void onConnected(WebSocket websocket, java.util.Map headers) {
System.out.println(websocket.getSocket().toString());
System.out.println(headers.toString());
logger.logInfo("QlikWebConnector", "connect", "connection: ",
websocket.getSocket().toString() + headers.toString());
}
public void onMessageError(com.neovisionaries.ws.client.WebSocket websocket,
com.neovisionaries.ws.client.WebSocketException cause, java.util.List frames)
throws java.lang.Exception {
}
public void onSendError(com.neovisionaries.ws.client.WebSocket websocket,
com.neovisionaries.ws.client.WebSocketException cause,
com.neovisionaries.ws.client.WebSocketFrame frame) throws java.lang.Exception {
}
public void onBinaryMessage(com.neovisionaries.ws.client.WebSocket websocket, byte[] binary)
throws java.lang.Exception {
}
public void onDisconnected(com.neovisionaries.ws.client.WebSocket websocket,
com.neovisionaries.ws.client.WebSocketFrame serverCloseFrame,
com.neovisionaries.ws.client.WebSocketFrame clientCloseFrame, boolean closedByServer)
throws java.lang.Exception {
}
}).addExtension(WebSocketExtension.PERMESSAGE_DEFLATE).connect();
if (ws.isOpen()) {
System.out.println("websocket is open ");
logger.logInfo("QlikWebConnector", "connect", "websocket is open: ", "websocket is open");
}
return ws;
}
我发送的请求如下:- 1) ws。sendText(“我的消息”)2)ws。sendText(“我的消息2”)
发生了什么事? 1) 两个请求同时被触发
问题/预期:- 1) 我希望socket等待第一个请求得到处理,因为第二个请求取决于第一个请求的响应
有线索吗
# 1 楼答案
一种方法是稍微改变一下程序的逻辑。例如,您可以发送第一条消息并监听响应,而不是同时从同一地点发送两条消息。收到第一条消息的回复后,您可以发送第二条消息
比如:
如果您有一些状态,并且根据您发送的特定消息的状态,那么您可以考虑使用State pattern。因此,对于每条消息,您的状态机将决定下一步(消息)