comparison src/org/eclipse/jetty/server/nio/SelectChannelConnector.java @ 913:17f4fe8271de

simplify connectors
author Franklin Schmidt <fschmidt@gmail.com>
date Sat, 08 Oct 2016 23:57:11 -0600
parents 1d0c304e12b5
children 54308d65265a
comparison
equal deleted inserted replaced
912:1d0c304e12b5 913:17f4fe8271de
65 * 65 *
66 * @org.apache.xbean.XBean element="nioConnector" description="Creates an NIO based socket connector" 66 * @org.apache.xbean.XBean element="nioConnector" description="Creates an NIO based socket connector"
67 */ 67 */
68 public class SelectChannelConnector extends Connector 68 public class SelectChannelConnector extends Connector
69 { 69 {
70 private int _lowResourcesConnections;
71 private int _lowResourcesMaxIdleTime;
72
73 private final SelectorManager _manager = new ConnectorSelectorManager(); 70 private final SelectorManager _manager = new ConnectorSelectorManager();
74 71
75 public SelectChannelConnector(Server server,int port) 72 public SelectChannelConnector(Server server,int port)
76 { 73 {
77 super(server,port); 74 super(server,port);
93 configure(socket); 90 configure(socket);
94 _manager.register(channel); 91 _manager.register(channel);
95 } 92 }
96 } 93 }
97 94
98 public synchronized void close() throws IOException
99 {
100 if (_acceptChannel != null)
101 {
102 if (_acceptChannel.isOpen())
103 _acceptChannel.close();
104 }
105 _acceptChannel = null;
106 }
107
108 @Override 95 @Override
109 public void customize(EndPoint endpoint, Request request) throws IOException 96 public void customize(EndPoint endpoint, Request request) throws IOException
110 { 97 {
111 request.setTimeStamp(System.currentTimeMillis()); 98 request.setTimeStamp(System.currentTimeMillis());
112 endpoint.setMaxIdleTime(_maxIdleTime); 99 endpoint.setMaxIdleTime(_maxIdleTime);
119 AsyncEndPoint aEndp = ((AsyncEndPoint)endpoint); 106 AsyncEndPoint aEndp = ((AsyncEndPoint)endpoint);
120 aEndp.setCheckForIdle(true); 107 aEndp.setCheckForIdle(true);
121 super.persist(endpoint); 108 super.persist(endpoint);
122 } 109 }
123 110
124 public SelectorManager getSelectorManager()
125 {
126 return _manager;
127 }
128
129 @Override
130 public void setMaxIdleTime(int maxIdleTime)
131 {
132 _manager.setMaxIdleTime(maxIdleTime);
133 super.setMaxIdleTime(maxIdleTime);
134 }
135
136 public int getLowResourcesConnections()
137 {
138 return _lowResourcesConnections;
139 }
140
141 /* ------------------------------------------------------------ */
142 /**
143 * Set the number of connections, which if exceeded places this manager in low resources state.
144 * This is not an exact measure as the connection count is averaged over the select sets.
145 * @param lowResourcesConnections the number of connections
146 * @see #setLowResourcesMaxIdleTime(int)
147 */
148 public void setLowResourcesConnections(int lowResourcesConnections)
149 {
150 _lowResourcesConnections=lowResourcesConnections;
151 }
152
153 /* ------------------------------------------------------------ */
154 /**
155 * @return the lowResourcesMaxIdleTime
156 */
157 @Override
158 public int getLowResourcesMaxIdleTime()
159 {
160 return _lowResourcesMaxIdleTime;
161 }
162
163 /* ------------------------------------------------------------ */
164 /**
165 * Set the period in ms that a connection is allowed to be idle when this there are more
166 * than {@link #getLowResourcesConnections()} connections. This allows the server to rapidly close idle connections
167 * in order to gracefully handle high load situations.
168 * @param lowResourcesMaxIdleTime the period in ms that a connection is allowed to be idle when resources are low.
169 * @see #setMaxIdleTime(int)
170 */
171 @Override
172 public void setLowResourcesMaxIdleTime(int lowResourcesMaxIdleTime)
173 {
174 _lowResourcesMaxIdleTime=lowResourcesMaxIdleTime;
175 super.setLowResourcesMaxIdleTime(lowResourcesMaxIdleTime);
176 }
177
178
179 @Override 111 @Override
180 protected synchronized void doStart() throws Exception 112 protected synchronized void doStart() throws Exception
181 { 113 {
182 _manager.setSelectSets(getAcceptors()); 114 _manager.setSelectSets(getAcceptors());
183 _manager.setMaxIdleTime(getMaxIdleTime()); 115 _manager.setMaxIdleTime(getMaxIdleTime());
184 _manager.setLowResourcesConnections(getLowResourcesConnections()); 116 _manager.setLowResourcesConnections(0);
185 _manager.setLowResourcesMaxIdleTime(getLowResourcesMaxIdleTime()); 117 _manager.setLowResourcesMaxIdleTime(0);
186 118
187 if (_acceptChannel == null) 119 if (_acceptChannel == null)
188 { 120 {
189 // Create a new server socket 121 // Create a new server socket
190 _acceptChannel = ServerSocketChannel.open(); 122 _acceptChannel = ServerSocketChannel.open();