[ https://issues.apache.org/jira/browse/HTTPCORE-480?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16110833#comment-16110833 ]
silver9886 commented on HTTPCORE-480: ------------------------------------- when return from readyCount = this.selector.select(this.selectTimeout); the time has elapsed (this.selectTimeout default is 1s). when the code execute the code if( (currentTime - this.lastTimeoutCheck) >= this.timeoutCheckInterval) the time is elapsed larger than (this.selectTimeout default is 1s). beacuse the pc need the time to execute the code between readyCount = this.selector.select(this.selectTimeout); and if( (currentTime - this.lastTimeoutCheck) >= this.timeoutCheckInterval) so currentTime - this.lastTimeoutCheck >= this.timeoutCheckInterval will always return true(because timeoutCheckInterval=selectTimeout ). I think if there is no post/get request , the currentTime - this.lastTimeoutCheck should no be true. suppose the time executed elapsed between readyCount = this.selector.select(this.selectTimeout); and if( (currentTime - this.lastTimeoutCheck) >= this.timeoutCheckInterval) at last need 1 millisecond. the new idea is this(i update the attach .java file) : add a protected class MinHoldTime default value is 1 (means at last 1 millisecond). if( (currentTime - this.lastTimeoutCheck) >= this.timeoutCheckInterval + minholdTime.get()) { if (keys != null) { for (final SelectionKey key : keys) { timeoutCheck(key, currentTime,minholdTime); } } } in the timeoutCheck,we can get the min sockettimeout is all sessions and change the minholdTime.get() return value. protected void timeoutCheck(final SelectionKey key, final long now, final MinHoldTime minHoldTime) { final IOSessionImpl session = (IOSessionImpl) key.attachment(); if (session != null) { final int timeout = session.getSocketTimeout(); if (minHoldTime.get() == 1 || minHoldTime.get() > timeout ) { minHoldTime.set(timeout); } if (timeout > 0) { if (session.getLastAccessTime() + timeout < now) { sessionTimedOut(session); } } } } > improve the code in check timeout > --------------------------------- > > Key: HTTPCORE-480 > URL: https://issues.apache.org/jira/browse/HTTPCORE-480 > Project: HttpComponents HttpCore > Issue Type: Improvement > Components: HttpCore NIO > Affects Versions: 4.4.6 > Reporter: silver9886 > Priority: Trivial > Fix For: 4.4.7 > > Attachments: AbstractIOReactor.java, BaseIOReactor.java > > > change the code in org.apache.http.impl.nio.reactor.BaseIOReactor: > if( (currentTime - this.lastTimeoutCheck) >= > this.timeoutCheckInterval) -> > if( (currentTime - this.lastTimeoutCheck) >= this.timeoutCheckInterval + 2) > because :the code will run for a time and network tranport expend the time > too. So currentTime - this.lastTimeoutCheck should be > larger than selectTimeout in order to check timeout. In this case , This will > make the code more efficiency. -- This message was sent by Atlassian JIRA (v6.4.14#64029) --------------------------------------------------------------------- To unsubscribe, e-mail: dev-unsubscr...@hc.apache.org For additional commands, e-mail: dev-h...@hc.apache.org