<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_DragonJ's PAD</title><subtitle type="text">阿蛟</subtitle><id>http://feed.cnblogs.com/blog/u/37361/rss</id><updated>2012-02-09T04:09:48Z</updated><author><name>啊蛟</name><uri>http://www.cnblogs.com/DragonJ/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/DragonJ/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/37361/rss"/><entry><id>http://www.cnblogs.com/DragonJ/archive/2011/10/10/2205345.html</id><title type="text">HttpClient 发现小问题</title><summary type="text">Android程序在长时间休眠后HttpClient不工作 用bugreport看线程信息都是在awaitConnectTask #3&amp;quot; prio=5 tid=16 WAIT | group=&amp;quot;main&amp;quot; sCount=1 dsCount=0 obj=0x4055a0a8 self=0x335db0 | sysTid=10869 nice=10 sched=0/0 cgrp=default handle=3366632 | schedstat=( 97869859 8969970715 475 ) at java.lang.Object.wait(Native M</summary><published>2011-10-10T04:01:00Z</published><updated>2011-10-10T04:01:00Z</updated><author><name>啊蛟</name><uri>http://www.cnblogs.com/DragonJ/</uri></author><link rel="alternate" href="http://www.cnblogs.com/DragonJ/archive/2011/10/10/2205345.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/DragonJ/archive/2011/10/10/2205345.html"/><content type="html">&lt;div&gt;&lt;div&gt;Android程序在长时间休眠后HttpClient不工作 用bugreport看线程信息都是在await&lt;/div&gt;&lt;p&gt;ConnectTask #3" prio=5 tid=16 WAIT&lt;/p&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; | group="main" sCount=1 dsCount=0 obj=0x4055a0a8 self=0x335db0&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; | sysTid=10869 nice=10 sched=0/0 cgrp=default handle=3366632&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; | schedstat=( 97869859 8969970715 475 )&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at java.lang.Object.wait(Native Method)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; - waiting on &amp;lt;0x4055a220&amp;gt; (a java.lang.VMThread)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at java.lang.Thread.parkFor(Thread.java:1443)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at java.lang.LangAccessImpl.parkFor(LangAccessImpl.java:48)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at sun.misc.Unsafe.park(Unsafe.java:337)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at java.util.concurrent.locks.LockSupport.park(LockSupport.java:157)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:2016)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at org.apache.http.impl.conn.tsccm.WaitingThread.await(WaitingThread.java:159)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at org.apache.http.impl.conn.tsccm.ConnPoolByRoute.getEntryBlocking(ConnPoolByRoute.java:339)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at org.apache.http.impl.conn.tsccm.ConnPoolByRoute$1.getPoolEntry(ConnPoolByRoute.java:238)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at org.apache.http.impl.conn.tsccm.ThreadSafeClientConnManager$1.getConnection(ThreadSafeClientConnManager.java:175)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at org.apache.http.impl.client.DefaultRequestDirector.execute(DefaultRequestDirector.java:325)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:555)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:487)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at org.apache.http.impl.client.AbstractHttpClient.execute(AbstractHttpClient.java:465)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at cn.com.fetion.connect.http.HttpHandler.executeHttpRequest(HttpHandler.java:157)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at cn.com.fetion.connect.http.AuthHttpHandler.doHttpGet(AuthHttpHandler.java:171)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at cn.com.fetion.connect.common.FetionConnectAPI.getCurrentStatusMessage(FetionConnectAPI.java:973)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at cn.com.fetion.connect.service.StatusMessageService$1.run(StatusMessageService.java:37)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:444)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at java.util.concurrent.FutureTask$Sync.innerRun(FutureTask.java:306)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at java.util.concurrent.FutureTask.run(FutureTask.java:138)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1088)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:581)&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; at java.lang.Thread.run(Thread.java:1027)&lt;/div&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;找到原因是再设置连接的时候的问题，在执行的时候Timeout是通过HttpRequest的HttpParams提供的。&lt;/p&gt;&lt;p&gt;程序在&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;div&gt;client = new DefaultHttpClient(ccm, httpParams);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;client.getParams().setParameter(CoreConnectionPNames.SO_TIMEOUT,&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;				&lt;/span&gt;TIMEOUT * 4000);&lt;/div&gt;&lt;div&gt;&lt;span style="white-space:pre"&gt;		&lt;/span&gt;client.getParams().setParameter(&lt;/div&gt;&lt;/div&gt;&lt;p&gt;&lt;span style="white-space:pre"&gt;				&lt;/span&gt;CoreConnectionPNames.CONNECTION_TIMEOUT, TIMEOUT * 1000);&amp;nbsp;&lt;/p&gt;&lt;/div&gt;&lt;div&gt;这样设置不起作用~！不知道是不是Android休眠照成的参数丢失。&lt;/div&gt;&lt;p&gt;SO 在Request的时候自己加。&lt;/p&gt;&lt;img src="http://www.cnblogs.com/DragonJ/aggbug/2205345.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/DragonJ/archive/2011/10/10/2205345.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/DragonJ/archive/2011/09/22/2184594.html</id><title type="text">HttpCore NIO 研究随笔 1</title><summary type="text">ConnectingIOReactor一般是每个核心建立一个线程维护作用是这个线程监听JAVA底层到NIO状态变化。然后会分发各个事件。对IOEventDispatch就是其分发实现到入口。ioReactor会通过调用IOEventDispatch完成NIO事件到通知工作。而IOEventDispatch其实也是一个对先发通知到执行入口。而出发IOEventDispatch动作的是AbstractMultiworkerIOReactor其通过AbstractIOReactor的实现BaseIOReactor达到把JAVA NIO的Selector做的。一层一层到通知到上面的。在Abstract</summary><published>2011-09-21T16:05:00Z</published><updated>2011-09-21T16:05:00Z</updated><author><name>啊蛟</name><uri>http://www.cnblogs.com/DragonJ/</uri></author><link rel="alternate" href="http://www.cnblogs.com/DragonJ/archive/2011/09/22/2184594.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/DragonJ/archive/2011/09/22/2184594.html"/><content type="html">&lt;div&gt;ConnectingIOReactor一般是每个核心建立一个线程维护&lt;/div&gt;&lt;p&gt;作用是这个线程监听JAVA底层到NIO状态变化。然后会分发各个事件。&amp;nbsp;&lt;/p&gt;&lt;p&gt;对IOEventDispatch就是其分发实现到入口。ioReactor会通过调用IOEventDispatch完成NIO事件到通知工作。&lt;/p&gt;&lt;p&gt;而&amp;nbsp;IOEventDispatch其实也是一个对先发通知到执行入口。&lt;/p&gt;&lt;p&gt;而出发IOEventDispatch动作的是AbstractMultiworkerIOReactor&amp;nbsp;其通过&amp;nbsp;AbstractIOReactor的实现BaseIOReactor达到把&lt;/p&gt;&lt;p&gt;JAVA NIO的Selector做的。一层一层到通知到上面的。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;在AbstractMultiworkerIOReactor&amp;nbsp;中的workcount就是创建几个线程去监听Selector，AbstractMultiworkerIOReactor会创建相应个数到线程执行监听工作。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;在说说&amp;nbsp;IOEventDispatch下面到这些类。当eventDispatch拿到了通知再通过NHttpClientHandler和在IOSession上下文中拿到的Conn去对Conn做一些自己想要到处理。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;而NHttpClientHandler的默认实现AsyncNHttpClientHandler中的NHttpRequestExecutionHandler是为了隔离Connection与Request的关系。&lt;/p&gt;&lt;p&gt;通过&amp;nbsp;NHttpRequestExecutionHandler做最终执行但是在Request中是没有Connection的。不用考虑Connection只要考虑当前请求到上下文HttpContext。&lt;/p&gt;&lt;p&gt;达到业务到隔离。&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;针对通道到上下文是有Conn到信息的。&amp;nbsp;&lt;/p&gt;&lt;div&gt;&lt;div&gt;session.getAttribute(IOSession.ATTACHMENT_KEY);&lt;/div&gt;&lt;/div&gt;&lt;p&gt;session.setAttribute(ExecutionContext.HTTP_CONNECTION, conn);&amp;nbsp;&lt;/p&gt;&lt;p&gt;生成Http的上下文是有通道信息IOSession的So，可以从上下文中取出很多信息。&lt;/p&gt;&lt;div&gt;&lt;div&gt;class SessionHttpContext implements HttpContext {&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;private final IOSession iosession;&amp;nbsp;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;&lt;/p&gt;&lt;p&gt;还有就是在默认实现中到部分信息也是用的。&lt;/p&gt;&lt;div&gt;&lt;div&gt;public interface ExecutionContext {&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; /**&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* Attribute name of a {@link com.apache.http.HttpConnection} object that&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* represents the actual HTTP connection.&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; public static final String HTTP_CONNECTION &amp;nbsp;= "http.connection";&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; /**&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* Attribute name of a {@link com.apache.http.HttpRequest} object that&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* represents the actual HTTP request.&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; public static final String HTTP_REQUEST &amp;nbsp; &amp;nbsp; = "http.request";&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; /**&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* Attribute name of a {@link com.apache.http.HttpResponse} object that&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* represents the actual HTTP response.&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; public static final String HTTP_RESPONSE &amp;nbsp; &amp;nbsp;= "http.response";&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; /**&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* Attribute name of a {@link com.apache.http.HttpHost} object that&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* represents the connection target.&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; public static final String HTTP_TARGET_HOST = "http.target_host";&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; /**&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* Attribute name of a {@link com.apache.http.HttpHost} object that&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* represents the connection proxy.&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; public static final String HTTP_PROXY_HOST &amp;nbsp;= "http.proxy_host";&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; /**&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* Attribute name of a {@link Boolean} object that represents the&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* the flag indicating whether the actual request has been fully transmitted&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* to the target host.&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; public static final String HTTP_REQ_SENT &amp;nbsp; &amp;nbsp;= "http.request_sent";&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;/div&gt;&lt;p&gt;}&amp;nbsp;&lt;/p&gt;&lt;img src="http://www.cnblogs.com/DragonJ/aggbug/2184594.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/DragonJ/archive/2011/09/22/2184594.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/DragonJ/archive/2008/12/20/1355652.html</id><title type="text">ExtJS 实现的Web文件管理系统(1)</title><summary type="text">上次的文章发了就等到了一个面试机会，还没成就来北京了上了一个.net培训班。这个是这里老师安排的作业，让用.netAJAX实现的，想了想觉得那ExtJS+XML写可能更好这个东西就出来，主要思想是用ExtJS实现前台的UI，然后用AJAX方式实现和服务器的信息交互，这里没有用到一下ASP.NET下的AJAX实现，就是用的ExtJS自己的AJAX实现。主要是因为效率的考虑，再有就是ExtJS构建的页...</summary><published>2008-12-20T04:35:00Z</published><updated>2008-12-20T04:35:00Z</updated><author><name>啊蛟</name><uri>http://www.cnblogs.com/DragonJ/</uri></author><link rel="alternate" href="http://www.cnblogs.com/DragonJ/archive/2008/12/20/1355652.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/DragonJ/archive/2008/12/20/1355652.html"/></entry><entry><id>http://www.cnblogs.com/DragonJ/archive/2008/09/26/1299228.html</id><title type="text">ASP.Net AJAX+userControl+js实现仿igoogle效果网站</title><summary type="text">第一次写东西有可能写得不是很好大家见谅。不知道大家有没有用过igoogle这个google的个人门户网站，我弄的这个东西就是模仿igoogle，主要的难点是新闻模块的动态生成和模块的拖放功能和位置保存。基本原理是用userControl去实现新闻的容器--新闻模块，模块的内容由RSS提供，ASP.Net AJAX实现模块的拖放和服务器的数据存储，js负责提供页面的动态信息交给服务器处理。</summary><published>2008-09-25T19:18:00Z</published><updated>2008-09-25T19:18:00Z</updated><author><name>啊蛟</name><uri>http://www.cnblogs.com/DragonJ/</uri></author><link rel="alternate" href="http://www.cnblogs.com/DragonJ/archive/2008/09/26/1299228.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/DragonJ/archive/2008/09/26/1299228.html"/></entry></feed>
