※ 引述《byend (漫步)》之銘言:
: 是的 我寫了個小測試..證明是 Chrome/Firefox 沒有發出新的連線需求.
: 方法如下: 先用 瀏覽器建立連線, 通常第二個或著第三個連線並沒有被建立..
: 接著用 telnet (Ex: 透過 KKMAN) 連線到 Server, Server 還是有建立新的連線.
:
: 我猜. 瀏覽器 可能有些偵錯/暫存機制...並免重複建立連線之類的.
:
: 如果你要用 Http Protocol, 還是建議你找 Apache HttpClient 之類的
: 來幫你處理 Http Header, 寫起來會簡潔一些.
:
: 最後, 我看了你前一篇的文章, 關於 Notify/Wait 部分.
: 有個建議. synchronized(this) {wait();}
: 綁定的對象 是 Client Handler Object 本身..
: 所以如果有十個 client handler object.
: : 這十個 Thread 個別綁定在 十個 object 上.
: 要 Notify 就不容易了..
這部分目前是採用一個 List 記住每個 Object
然後逐一 notify...
:
: 先建一個 Object 當作 等待的對象. 比較容易解決.
: 也就是我上面的例子中的 waitFlag.
恩,我在 javaworld 有比較詳細的把我找到問題的過程寫出來,
簡單來說就應該就是:
Firefox 和 Chrome 有一種機制,他記得某 URL 還沒得到回應的話
要是在發出對同樣 URL 的 request 會等到之前那一個回應才會進行
也就是沒有發出第二條連線( check by WireShark)
解決的話其實也頗簡單,就是在 request 的 URL 後面加給他一些亂數就好:
ex:
var rnd=Math.floor(Math.random()*1000);
$.get("http://localhost:8888/poll_"+rnd,{},function(data){
console.log(data);
});
這樣 Firefox 或 Chrome 會認定他們是不同的 URL (本來就不同XD)
底下是我用 VisualVM monitor Thread 的結果:
Thread 的名稱是 [IP]{URL} http://ppt.cc/g~zU
先直接連兩次 poll , 等到兩個都回應後,
再連兩次有加 random 的 request (手殘按到三下)
--
※ 發信站: 批踢踢實業坊(ptt.cc)
◆ From: 140.116.243.66
※ 編輯: darkk6 來自: 140.116.243.66 (07/06 20:33)