作者darkk6 (Mr. Pan)
看板java
标题Re: [问题] wait() notify() 使用时机
时间Fri Jul 6 20:29:31 2012
※ 引述《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)