web聊天技術一般用ajax請求服務器,方式有多種,比如定時幾秒請求一次,或長連接什麼的。我個人還是喜歡“服務器推”這種模式,它不用定幾秒請求一次讓服務器大大減壓。長連接什麼這個不懂什麼意思不管了(額,不知道”服務器推“屬於哪一種)。
"服務器推送",是指當有消息時就把消息從服務器分發下來。從字面上看這個HTTP協議好像不能實現,因爲HTTP是有請求才有響應的。即然這樣,那我們換個思路想一下,即要實現”服務器推“又要尊詢HTTP,那麼我們能不能把請求給掛起來呢,當然可以!
我們知道一個HTTP請求就是一個新線程,那麼我們就把所以獲取消息的請求的線程給suspend()起來,這裏爲什麼不用wait或sleep,用sleep是定時沉睡,所以不能智能化,至於wait這個東西必須要線程用到synchronized這個東西,否則會產生異常,不深研這個了(或許可以用wait,只是本人對線程不很熟所以不說這個了)。
當有消息發送上來的時候我們就用resume(),把掛起的所有消息線程喚醒(喚醒之前別忘了把消息用printwriter寫進流)。
這樣第一輪消息成功接收,當客戶端成功響應時我們在js回調方法裏產即再次調用ajax獲取消息請求。基本思路完成.
在這期間我們不需考慮很多細節問題比如,HTTP掛起超時或session失效什麼的。
不寫了有不懂的或感興趣的加 +qq 317822276
JSP的簡單例子http://download.csdn.net/detail/bichir/5088881,其他的如asp.net,原理一樣.