Я пытаюсь понять больше об асинхронных уведомлениях.У меня есть URL в виде:
http://www.sample.com/AsyncNotify?sessionId=xxxxxx
Теперь, если я вызываю этот URL с помощью sessionId, это эквивалентно регистрации для асинхронных уведомлений.Я использую библиотеку Apache HTTP Commons для выполнения Http Post и Get.Если это так, то как я могу получать события со стороны сервера?Должен ли я забыть этот подход и использовать вместо него сокеты?В настоящее время это мой подход:
HttpClient httpClient = new HttpClient;
String url = "http://www.sample.com/AsyncNotify?sessionId=xxxxxx"
GetMethod get = new GetMethod(url);
try {
httpClient.executeMethod(get);
//read the response
} catch(Exception e) {
}
Я думал о том, чтобы установить соединение на уровне сокета внутри цикла while и вызывать обработчик всякий раз, когда он получает некоторые данные, но есть ли лучший способ добиться этого?
РЕДАКТИРОВАТЬ:
Я использовал xSocket, чтобы перейти к следующему этапу, но соединение закрывается через 30 секунд:
try {
String _GETRequest = "/sample/notify";
HttpClientConnection con = new HttpClientConnection("10.0.0.23", 5050);
con.setConnectionTimeoutMillis(100000);
GetRequest request = new GetRequest(_GETRequest);
request.setParameter("id", id);
IHttpResponseHandler responseHandler = new AsyncHandler();
con.send(request, responseHandler);
org.xlightweb.client.HttpClient httpClient = new org.xlightweb.client.HttpClient();
request.setParameter("id", id);
con.send(request, responseHandler);
// Don't let the program terminate. In other words,
// wait for a message from the server
while(con.isOpen()) {};
if(!con.isOpen()) {
}
} catch (ConnectException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}