我目前正在編寫一個Comet應用程序,它需要我一次發送長時間連接的數據塊。但是,在關閉連接之前,我無法將消息刷新到客戶端。 PrintWriter.flush()方法的行爲不像我認爲的那樣嗎?Java Servlets:爲什麼PrintWriter.flush()不會沖洗?
這是我的Tomcat Comet實現:
public void event(CometEvent event) throws IOException, ServletException {
HttpServletRequest request = event.getHttpServletRequest();
HttpServletResponse response = event.getHttpServletResponse();
if (event.getEventType() == EventType.BEGIN) {
request.setAttribute("org.apache.tomcat.comet.timeout", 300 * 1000);
PrintWriter out = response.getWriter();
out.println("BEGIN!");
out.flush();
System.out.println("EventType.BEGIN");
} else if (event.getEventType() == EventType.READ) {
InputStream is = request.getInputStream();
byte[] buf = new byte[512];
do {
int n = is.read(buf); //can throw an IOException
if (n > 0) {
System.out.println("Read " + n + " bytes: " + new String(buf, 0, n)
+ " for session: " + request.getSession(true).getId());
} else if (n < 0) {
return;
}
} while (is.available() > 0);
System.out.println("subtype: "+event.getEventSubType());
System.out.println("EventType.READ");
} else if (event.getEventType() == EventType.END) {
PrintWriter out = response.getWriter();
out.println("END!");
out.close();
System.out.println("checkError: "+out.checkError());
System.out.println(event.getEventSubType());
System.out.println("EventType.END");
//eventWorker.enqueue(new EndEvent(request, response));
} else if (event.getEventType() == EventType.ERROR) {
PrintWriter out = response.getWriter();
out.println("ERROR!");
out.flush();
System.out.println("checkError: "+out.checkError());
System.out.println("subtype: "+event.getEventSubType());
//response.getWriter().close();
System.out.println("EventType.ERROR");
} else {
(new ServletException("EXCEPTION")).printStackTrace();
}
}
所以在這裏我想發送消息 「開始吧!」並保持連接後打開,所以我可以發送更多的數據。但是,在連接關閉之前,消息似乎沒有通過。
這是我的ajax代碼: $ .post('comet',function(data){alert(data);});
後,我運行此代碼,螢火告訴我,這是響應頭: 服務器:Apache-狼/ 1.1 傳輸編碼:分塊 日期:星期一,2009年21時十六分29秒GMT
7月13日這使我認爲我的瀏覽器收到了一些數據,但是如何在連接關閉之前更新頁面上的某些內容?
所以我在這裏試圖發送消息「BEGIN!」並保持連接後打開,所以我可以發送更多的數據。但是,在連接關閉之前,消息似乎沒有通過。 – jcee14 2009-07-14 14:25:05