13
13
14
14
package com .ning .http .client .providers .grizzly ;
15
15
16
+ import com .ning .http .client .AsyncHandler ;
17
+ import com .ning .http .client .AsyncHandlerExtensions ;
18
+ import com .ning .http .client .AsyncHttpClient ;
19
+ import com .ning .http .client .AsyncHttpClientConfig ;
20
+ import com .ning .http .client .AsyncHttpProvider ;
21
+ import com .ning .http .client .AsyncHttpProviderConfig ;
22
+ import com .ning .http .client .Body ;
23
+ import com .ning .http .client .BodyGenerator ;
24
+ import com .ning .http .client .ConnectionsPool ;
25
+ import com .ning .http .client .FluentCaseInsensitiveStringsMap ;
26
+ import com .ning .http .client .FluentStringsMap ;
27
+ import com .ning .http .client .HttpResponseBodyPart ;
28
+ import com .ning .http .client .HttpResponseHeaders ;
29
+ import com .ning .http .client .HttpResponseStatus ;
30
+ import com .ning .http .client .ListenableFuture ;
31
+ import com .ning .http .client .MaxRedirectException ;
32
+ import com .ning .http .client .Part ;
33
+ import com .ning .http .client .PerRequestConfig ;
34
+ import com .ning .http .client .ProxyServer ;
35
+ import com .ning .http .client .Realm ;
36
+ import com .ning .http .client .Request ;
37
+ import com .ning .http .client .RequestBuilder ;
38
+ import com .ning .http .client .Response ;
39
+ import com .ning .http .client .UpgradeHandler ;
40
+ import com .ning .http .client .cookie .Cookie ;
41
+ import com .ning .http .client .cookie .CookieDecoder ;
42
+ import com .ning .http .client .filter .FilterContext ;
43
+ import com .ning .http .client .filter .ResponseFilter ;
44
+ import com .ning .http .client .listener .TransferCompletionHandler ;
45
+ import com .ning .http .client .ntlm .NTLMEngine ;
16
46
import static com .ning .http .client .providers .grizzly .GrizzlyAsyncHttpProviderConfig .Property .BUFFER_WEBSOCKET_FRAGMENTS ;
17
47
import static com .ning .http .client .providers .grizzly .GrizzlyAsyncHttpProviderConfig .Property .MAX_HTTP_PACKET_HEADER_SIZE ;
18
48
import static com .ning .http .client .providers .grizzly .GrizzlyAsyncHttpProviderConfig .Property .TRANSPORT_CUSTOMIZER ;
49
+ import com .ning .http .client .websocket .WebSocket ;
50
+ import com .ning .http .client .websocket .WebSocketByteListener ;
51
+ import com .ning .http .client .websocket .WebSocketCloseCodeReasonListener ;
52
+ import com .ning .http .client .websocket .WebSocketListener ;
53
+ import com .ning .http .client .websocket .WebSocketPingListener ;
54
+ import com .ning .http .client .websocket .WebSocketPongListener ;
55
+ import com .ning .http .client .websocket .WebSocketTextListener ;
56
+ import com .ning .http .client .websocket .WebSocketUpgradeHandler ;
57
+ import com .ning .http .multipart .MultipartBody ;
58
+ import com .ning .http .multipart .MultipartRequestEntity ;
59
+ import com .ning .http .util .AsyncHttpProviderUtils ;
60
+ import com .ning .http .util .AuthenticatorUtils ;
61
+ import static com .ning .http .util .MiscUtil .isNonEmpty ;
62
+ import static com .ning .http .util .MiscUtil .isNonEmpty ;
19
63
import static com .ning .http .util .MiscUtil .isNonEmpty ;
20
64
65
+ import com .ning .http .util .ProxyUtils ;
66
+ import com .ning .http .util .SslUtils ;
21
67
import java .io .ByteArrayOutputStream ;
22
68
import java .io .File ;
23
69
import java .io .FileInputStream ;
42
88
import java .util .concurrent .TimeoutException ;
43
89
import java .util .concurrent .atomic .AtomicInteger ;
44
90
import java .util .concurrent .atomic .AtomicLong ;
45
-
46
91
import javax .net .ssl .SSLContext ;
47
-
48
92
import org .glassfish .grizzly .Buffer ;
93
+ import org .glassfish .grizzly .CloseListener ;
94
+ import org .glassfish .grizzly .CloseType ;
95
+ import org .glassfish .grizzly .Closeable ;
49
96
import org .glassfish .grizzly .CompletionHandler ;
50
97
import org .glassfish .grizzly .Connection ;
51
98
import org .glassfish .grizzly .EmptyCompletionHandler ;
80
127
import org .glassfish .grizzly .impl .SafeFutureImpl ;
81
128
import org .glassfish .grizzly .memory .Buffers ;
82
129
import org .glassfish .grizzly .memory .MemoryManager ;
130
+ import org .glassfish .grizzly .nio .RoundRobinConnectionDistributor ;
83
131
import org .glassfish .grizzly .nio .transport .TCPNIOConnectorHandler ;
84
132
import org .glassfish .grizzly .nio .transport .TCPNIOTransport ;
85
133
import org .glassfish .grizzly .nio .transport .TCPNIOTransportBuilder ;
86
134
import org .glassfish .grizzly .ssl .SSLEngineConfigurator ;
87
135
import org .glassfish .grizzly .ssl .SSLFilter ;
88
136
import org .glassfish .grizzly .strategies .SameThreadIOStrategy ;
89
137
import org .glassfish .grizzly .strategies .WorkerThreadIOStrategy ;
138
+ import org .glassfish .grizzly .threadpool .ThreadPoolConfig ;
90
139
import org .glassfish .grizzly .utils .BufferOutputStream ;
91
140
import org .glassfish .grizzly .utils .Charsets ;
92
141
import org .glassfish .grizzly .utils .DelayedExecutor ;
103
152
import org .slf4j .Logger ;
104
153
import org .slf4j .LoggerFactory ;
105
154
106
- import com .ning .http .client .AsyncHandler ;
107
- import com .ning .http .client .AsyncHandlerExtensions ;
108
- import com .ning .http .client .AsyncHttpClient ;
109
- import com .ning .http .client .AsyncHttpClientConfig ;
110
- import com .ning .http .client .AsyncHttpProvider ;
111
- import com .ning .http .client .AsyncHttpProviderConfig ;
112
- import com .ning .http .client .Body ;
113
- import com .ning .http .client .BodyGenerator ;
114
- import com .ning .http .client .ConnectionsPool ;
115
- import com .ning .http .client .FluentCaseInsensitiveStringsMap ;
116
- import com .ning .http .client .FluentStringsMap ;
117
- import com .ning .http .client .HttpResponseBodyPart ;
118
- import com .ning .http .client .HttpResponseHeaders ;
119
- import com .ning .http .client .HttpResponseStatus ;
120
- import com .ning .http .client .ListenableFuture ;
121
- import com .ning .http .client .MaxRedirectException ;
122
- import com .ning .http .client .Part ;
123
- import com .ning .http .client .PerRequestConfig ;
124
- import com .ning .http .client .ProxyServer ;
125
- import com .ning .http .client .Realm ;
126
- import com .ning .http .client .Request ;
127
- import com .ning .http .client .RequestBuilder ;
128
- import com .ning .http .client .Response ;
129
- import com .ning .http .client .UpgradeHandler ;
130
- import com .ning .http .client .cookie .Cookie ;
131
- import com .ning .http .client .cookie .CookieDecoder ;
132
- import com .ning .http .client .filter .FilterContext ;
133
- import com .ning .http .client .filter .ResponseFilter ;
134
- import com .ning .http .client .listener .TransferCompletionHandler ;
135
- import com .ning .http .client .ntlm .NTLMEngine ;
136
- import com .ning .http .client .websocket .WebSocket ;
137
- import com .ning .http .client .websocket .WebSocketByteListener ;
138
- import com .ning .http .client .websocket .WebSocketCloseCodeReasonListener ;
139
- import com .ning .http .client .websocket .WebSocketListener ;
140
- import com .ning .http .client .websocket .WebSocketPingListener ;
141
- import com .ning .http .client .websocket .WebSocketPongListener ;
142
- import com .ning .http .client .websocket .WebSocketTextListener ;
143
- import com .ning .http .client .websocket .WebSocketUpgradeHandler ;
144
- import com .ning .http .multipart .MultipartBody ;
145
- import com .ning .http .multipart .MultipartRequestEntity ;
146
- import com .ning .http .util .AsyncHttpProviderUtils ;
147
- import com .ning .http .util .AuthenticatorUtils ;
148
- import com .ning .http .util .ProxyUtils ;
149
- import com .ning .http .util .SslUtils ;
150
- import org .glassfish .grizzly .CloseListener ;
151
- import org .glassfish .grizzly .CloseType ;
152
- import org .glassfish .grizzly .Closeable ;
153
-
154
155
/**
155
156
* A Grizzly 2.0-based implementation of {@link AsyncHttpProvider}.
156
157
*
@@ -420,6 +421,24 @@ public void onTimeout(Connection connection) {
420
421
fcb .add (clientFilter );
421
422
clientTransport .getAsyncQueueIO ().getWriter ()
422
423
.setMaxPendingBytesPerConnection (AsyncQueueWriter .AUTO_SIZE );
424
+
425
+ clientTransport .setNIOChannelDistributor (
426
+ new RoundRobinConnectionDistributor (clientTransport , false , false ));
427
+
428
+ final int kernelThreadsCount =
429
+ clientConfig .getIoThreadMultiplier () *
430
+ Runtime .getRuntime ().availableProcessors ();
431
+
432
+ clientTransport .setSelectorRunnersCount (kernelThreadsCount );
433
+ clientTransport .setKernelThreadPoolConfig (
434
+ ThreadPoolConfig .defaultConfig ()
435
+ .setCorePoolSize (kernelThreadsCount )
436
+ .setMaxPoolSize (kernelThreadsCount )
437
+ .setPoolName ("grizzly-ahc-kernel" )
438
+ // .setPoolName(discoverTestName("grizzly-ahc-kernel")) // uncomment for tests to track down the leaked threads
439
+ );
440
+
441
+
423
442
final TransportCustomizer customizer = (TransportCustomizer )
424
443
providerConfig .getProperty (TRANSPORT_CUSTOMIZER );
425
444
if (customizer != null ) {
@@ -428,7 +447,7 @@ public void onTimeout(Connection connection) {
428
447
doDefaultTransportConfig ();
429
448
}
430
449
fcb .add (new WebSocketFilter ());
431
-
450
+
432
451
clientTransport .setProcessor (fcb .build ());
433
452
434
453
}
0 commit comments