2009-09-29 52 views
0

試圖讓我的方式造成彗星與Java servlets,我遇到了一個大問題:似乎沒有辦法使用建立的連接到客戶端從瀏覽器發送服務器附加數據在寫入輸入流時以普通的java工作)。彗星,雄貓和閱讀事件

當客戶端連接到servlet時,CometChat應用程序出現以下問題:接收發送輸入的表單和呈現服務器輸出的表單:現在,如果客戶端想要在此連接處發送一些數據,導致發生READ事件在servlet中,這怎麼做?

我試着發送GET,HEAD和POST。隨着頭,彗星連接後關閉。 GET始終產生END,BEGIN和POST產生BEGIN,READ。

我試着在網上搜索,但我發現的唯一答案是:當有一個POST方法與身體

我怎樣才能做到這一點彗星READ事件發生?

我使用的是普通的JavaScript的Ajax:

function send(content) { 
    var text = document.controller.input.value; 
    params = 'input=' + content; 
    var ajaxObj = createXMLHttp(); 
    ajaxObj.open('POST', 'CometChat', true); 
    ajaxObj.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded'); 
    ajaxObj.setRequestHeader('Content-Length', params.length); 
    ajaxObj.setRequestHeader('Connection', 'close'); 
    ajaxObj.onreadystatechange = function() {}; 
    ajaxObj.send(params); 
} 

這將產生BEGIN,READ。我需要設置哪些標題才能生成完全READ事件?

我能夠通過查找我的連接並重新使用響應來「欺騙」,但在客戶端,AJAX請求保持交互模式(儘管在服務器上刷新它),我只能夠在未處理以下請求之前,對FF上的5個請求和對IE上的10個請求。另外,只要在服務器上收到第一個AJAX請求,我就會得到TIMEOUT事件,每個請求永遠重複兩次。

什麼是真正的方法?

回答

1

祝你好運,用Java Servlets創建Comet應用程序是一項相當複雜的任務。 Plus Tomcat並不是真正爲此設計的。我建議你退房StreamHub Comet Server

+1

是的,觀察到這一點,只是想學技術。但是,爲什麼Tomcat在不可用時不支持這種功能,而且還沒有辦法呢?我沉迷於StreamHub Comet Server,很可能這將是我的出路。另一種選擇可能是來自Glassfish的Project Atmosphere聲稱支持所有AppServers加上Tomcat和Jetty。但是,謝謝,你的回答讓我有點忘記純粹的tomcat彗星發展...... Greetz,GHad – GHad 2009-10-01 09:45:27

+0

沒問題。我認爲彗星當時越來越受歡迎 - 所以他們決定不去考慮它。對於真正高性能的Comet,你需要一個服務器來處理大量的開放連接。大氣或灰熊可能是另一種選擇。 – rajax 2009-10-01 12:52:07

0

正如rajax所說,在servlets中開發Comet應用程序是一個非常糟糕的主意。