日期:2014-05-17  浏览次数:20462 次

服务器推送出现的JS问题
服务器代码:
while (true)
{//死循环保持长链接
str = "<script >window.parent.Change('" + DateTime.Now.ToLongTimeString() + "')</script>";
this.Context.Response.Write(str);
this.Context.Response.Flush();//输脚本调用出
System.Threading.Thread.Sleep(1000);
}
上面的代码写在一个HttpHandler中

当客户端关闭时,服务器并不知道或是没有马上知道,于是向浏览器继续推送。
当执行<script >window.parent.Change('" + DateTime.Now.ToLongTimeString() + "')</script>时
由于找不到Change()方法浏览器提示JS错误。

请问如果在浏览器关闭窗口时能通知到服务器 中止死循环。
------解决方案--------------------
try{}catch{Response.End();}

多简单粗暴有效啊!
------解决方案--------------------
Comet? 记录每个request连接的时间   服务器上循环的时候设置timeout 比如60秒    循环的时候就算达到50秒后就push   然后客户端继续连接一个新的request   
这样即使关闭了浏览器   刚才的连接也会在60秒后自动放弃