Mercurial Hosting > luan
comparison src/org/eclipse/jetty/server/nio/BlockingChannelConnector.java @ 975:53b3f7d9714c
simplify BlockingChannelConnector
author | Franklin Schmidt <fschmidt@gmail.com> |
---|---|
date | Sun, 16 Oct 2016 01:10:02 -0600 |
parents | 7422ca1ae146 |
children | bdb6eb0fbf93 |
comparison
equal
deleted
inserted
replaced
974:7422ca1ae146 | 975:53b3f7d9714c |
---|---|
73 | 73 |
74 @Override | 74 @Override |
75 protected void doStart() throws Exception | 75 protected void doStart() throws Exception |
76 { | 76 { |
77 // Create a new server socket and set to non blocking mode | 77 // Create a new server socket and set to non blocking mode |
78 _acceptChannel= ServerSocketChannel.open(); | 78 _acceptChannel = ServerSocketChannel.open(); |
79 _acceptChannel.configureBlocking(true); | 79 _acceptChannel.configureBlocking(true); |
80 | 80 |
81 // Bind the server socket to the local host and port | 81 // Bind the server socket to the local host and port |
82 InetSocketAddress addr = getHost()==null?new InetSocketAddress(port):new InetSocketAddress(getHost(),port); | 82 InetSocketAddress addr = getHost()==null?new InetSocketAddress(port):new InetSocketAddress(getHost(),port); |
83 _acceptChannel.bind(addr); | 83 _acceptChannel.bind(addr); |
91 while (isRunning()) | 91 while (isRunning()) |
92 { | 92 { |
93 try | 93 try |
94 { | 94 { |
95 Thread.sleep(400); | 95 Thread.sleep(400); |
96 long now=System.currentTimeMillis(); | 96 long now = System.currentTimeMillis(); |
97 for (BlockingChannelEndPoint endp : _endpoints) | 97 for (BlockingChannelEndPoint endp : _endpoints) |
98 { | 98 { |
99 endp.checkIdleTimestamp(now); | 99 endp.checkIdleTimestamp(now); |
100 } | 100 } |
101 } | 101 } |
121 SocketChannel channel = _acceptChannel.accept(); | 121 SocketChannel channel = _acceptChannel.accept(); |
122 channel.configureBlocking(true); | 122 channel.configureBlocking(true); |
123 Socket socket = channel.socket(); | 123 Socket socket = channel.socket(); |
124 configure(socket); | 124 configure(socket); |
125 | 125 |
126 BlockingChannelEndPoint connection=new BlockingChannelEndPoint(channel); | 126 BlockingChannelEndPoint connection = new BlockingChannelEndPoint(channel); |
127 connection.dispatch(); | 127 try { |
128 server.threadPool.execute(connection); | |
129 } catch(RejectedExecutionException e) { | |
130 LOG.warn("dispatch failed for {}",connection._connection); | |
131 connection.close(); | |
132 } | |
128 } | 133 } |
129 | 134 |
130 @Override | 135 @Override |
131 public void customize(EndPoint endpoint, Request request) | 136 public void customize(EndPoint endpoint, Request request) |
132 throws IOException | 137 throws IOException |
148 { | 153 { |
149 super(channel,BlockingChannelConnector.this._maxIdleTime); | 154 super(channel,BlockingChannelConnector.this._maxIdleTime); |
150 _connection = new BlockingHttpConnection(BlockingChannelConnector.this,this); | 155 _connection = new BlockingHttpConnection(BlockingChannelConnector.this,this); |
151 } | 156 } |
152 | 157 |
153 public void checkIdleTimestamp(long now) | 158 private void checkIdleTimestamp(long now) |
154 { | 159 { |
155 if (_idleTimestamp!=0 && _timeout>0 && now>(_idleTimestamp+_timeout)) | 160 if (_idleTimestamp!=0 && _timeout>0 && now>(_idleTimestamp+_timeout)) |
156 { | 161 { |
157 idleExpired(); | 162 try |
158 } | 163 { |
159 } | 164 close(); |
160 | 165 } |
161 protected void idleExpired() | 166 catch (IOException e) |
167 { | |
168 LOG.trace("",e); | |
169 } | |
170 } | |
171 } | |
172 | |
173 @Override | |
174 public int fill(Buffer buffer) throws IOException | |
175 { | |
176 _idleTimestamp = System.currentTimeMillis(); | |
177 return super.fill(buffer); | |
178 } | |
179 | |
180 @Override | |
181 public int flush(Buffer buffer) throws IOException | |
182 { | |
183 _idleTimestamp = System.currentTimeMillis(); | |
184 return super.flush(buffer); | |
185 } | |
186 | |
187 @Override | |
188 public int flush(Buffer header, Buffer buffer, Buffer trailer) throws IOException | |
189 { | |
190 _idleTimestamp = System.currentTimeMillis(); | |
191 return super.flush(header,buffer,trailer); | |
192 } | |
193 | |
194 @Override | |
195 public void run() | |
162 { | 196 { |
163 try | 197 try |
164 { | 198 { |
165 super.close(); | 199 _timeout = getMaxIdleTime(); |
166 } | |
167 catch (IOException e) | |
168 { | |
169 LOG.trace("",e); | |
170 } | |
171 } | |
172 | |
173 void dispatch() throws IOException | |
174 { | |
175 try { | |
176 server.threadPool.execute(this); | |
177 } catch(RejectedExecutionException e) { | |
178 LOG.warn("dispatch failed for {}",_connection); | |
179 super.close(); | |
180 } | |
181 } | |
182 | |
183 /* ------------------------------------------------------------ */ | |
184 /** | |
185 * @see org.eclipse.jetty.io.nio.ChannelEndPoint#fill(org.eclipse.jetty.io.Buffer) | |
186 */ | |
187 @Override | |
188 public int fill(Buffer buffer) throws IOException | |
189 { | |
190 _idleTimestamp=System.currentTimeMillis(); | |
191 return super.fill(buffer); | |
192 } | |
193 | |
194 /* ------------------------------------------------------------ */ | |
195 /** | |
196 * @see org.eclipse.jetty.io.nio.ChannelEndPoint#flush(org.eclipse.jetty.io.Buffer) | |
197 */ | |
198 @Override | |
199 public int flush(Buffer buffer) throws IOException | |
200 { | |
201 _idleTimestamp=System.currentTimeMillis(); | |
202 return super.flush(buffer); | |
203 } | |
204 | |
205 /* ------------------------------------------------------------ */ | |
206 /** | |
207 * @see org.eclipse.jetty.io.nio.ChannelEndPoint#flush(org.eclipse.jetty.io.Buffer, org.eclipse.jetty.io.Buffer, org.eclipse.jetty.io.Buffer) | |
208 */ | |
209 @Override | |
210 public int flush(Buffer header, Buffer buffer, Buffer trailer) throws IOException | |
211 { | |
212 _idleTimestamp=System.currentTimeMillis(); | |
213 return super.flush(header,buffer,trailer); | |
214 } | |
215 | |
216 /* ------------------------------------------------------------ */ | |
217 public void run() | |
218 { | |
219 try | |
220 { | |
221 _timeout=getMaxIdleTime(); | |
222 _endpoints.add(this); | 200 _endpoints.add(this); |
223 | 201 |
224 while (isOpen()) | 202 while (isOpen()) |
225 { | 203 { |
226 _idleTimestamp=System.currentTimeMillis(); | 204 _idleTimestamp = System.currentTimeMillis(); |
227 _connection.handle(); | 205 _connection.handle(); |
228 | 206 |
229 } | 207 } |
230 } | 208 } |
231 catch (EofException e) | 209 catch (EofException e) |
235 catch(IOException e2){LOG.trace("",e2);} | 213 catch(IOException e2){LOG.trace("",e2);} |
236 } | 214 } |
237 catch (HttpException e) | 215 catch (HttpException e) |
238 { | 216 { |
239 LOG.debug("BAD", e); | 217 LOG.debug("BAD", e); |
240 try{super.close();} | 218 try{close();} |
241 catch(IOException e2){LOG.trace("",e2);} | 219 catch(IOException e2){LOG.trace("",e2);} |
242 } | 220 } |
243 catch(Throwable e) | 221 catch(Throwable e) |
244 { | 222 { |
245 LOG.warn("handle failed",e); | 223 LOG.warn("handle failed",e); |
246 try{super.close();} | 224 try{close();} |
247 catch(IOException e2){LOG.trace("",e2);} | 225 catch(IOException e2){LOG.trace("",e2);} |
248 } | 226 } |
249 finally | 227 finally |
250 { | 228 { |
251 _endpoints.remove(this); | 229 _endpoints.remove(this); |
253 // wait for client to close, but if not, close ourselves. | 231 // wait for client to close, but if not, close ourselves. |
254 try | 232 try |
255 { | 233 { |
256 if (!_socket.isClosed()) | 234 if (!_socket.isClosed()) |
257 { | 235 { |
258 long timestamp=System.currentTimeMillis(); | 236 long timestamp = System.currentTimeMillis(); |
259 int max_idle=getMaxIdleTime(); | 237 int max_idle = getMaxIdleTime(); |
260 | 238 |
261 _socket.setSoTimeout(getMaxIdleTime()); | 239 _socket.setSoTimeout(getMaxIdleTime()); |
262 int c=0; | 240 int c=0; |
263 do | 241 do |
264 { | 242 { |
274 LOG.trace("",e); | 252 LOG.trace("",e); |
275 } | 253 } |
276 } | 254 } |
277 } | 255 } |
278 | 256 |
279 /* ------------------------------------------------------------ */ | |
280 @Override | 257 @Override |
281 public String toString() | 258 public String toString() |
282 { | 259 { |
283 return String.format("BCEP@%x{l(%s)<->r(%s),open=%b,ishut=%b,oshut=%b}-{%s}", | 260 return String.format("BCEP@%x{l(%s)<->r(%s),open=%b,ishut=%b,oshut=%b}-{%s}", |
284 hashCode(), | 261 hashCode(), |