Java Websocket ждет ответа, прежде чем сделать следующий запрос к тому же сокету - PullRequest
0 голосов
/ 13 февраля 2019
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 («мое сообщение1») 2) ws.sendText («мое сообщение2»)

Что происходит?1) оба запроса выполняются одновременно.

Проблема / ожидание: - 1) Я хочу, чтобы мой сокет дождался обработки первого запроса, поскольку мой второй запрос зависит от ответа первого запроса.

Есть ли отведения?

1 Ответ

0 голосов
/ 13 февраля 2019

Один из способов сделать это - немного изменить логику вашей программы.Например, вместо того, чтобы отправлять оба сообщения в одно и то же время и из одного места, вы можете отправить первое сообщение и прослушать ответ.После получения ответа на первое сообщение - вы можете отправить второе.

Примерно так:

public void onTextMessage(WebSocket websocket, String message) {
    if (shouldSendSeccondMessage(message)) {
        sendSeccondMessage();
    }
}

Если у вас есть состояние и в соответствии с состоянием вы отправляете конкретное сообщение- тогда вы можете подумать об использовании шаблона State .Таким образом, для каждого сообщения ваш конечный автомат будет определять следующий шаг (сообщение).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...