我想了解更多關於異步通知。我有一個URL形式:註冊異步通知的URL?
http://www.sample.com/AsyncNotify?sessionId=xxxxxx
現在,如果我用sessionId調用此URL,它等同於註冊異步通知。我使用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();
}
@Romain:感謝您的輸入。我正在修改如何編寫與Comet服務器一起工作的Java客戶端。至於WebSocket,我的服務器不支持它,所以這不是一個選項。如果你在一個與Comet服務器一起工作的非常簡單的基於純Java的客戶端上有一些輸入,我會非常喜歡。 – Legend 2010-06-26 04:12:44
@Legend - 您正在使用哪個應用服務器?你的客戶寫了什麼?我在回答結尾添加了一些鏈接,可能有助於 – 2010-06-26 04:18:10
@Romain:感謝您的回覆。我認爲服務器使用灰熊彗星'https:// grizzly.dev.java.net /'我可以使用XMLHttpRequest使用JavaScript處理,但使用Java,出於某種原因,它不響應。我已經看過你發佈的教程。我添加了教程中提到的jar,但像IHttpRequestHandler等一些類仍然不可見。 – Legend 2010-06-26 05:16:57