01: /**
02: *
03: */package org.mortbay.jetty.nio;
04:
05: import org.mortbay.io.Buffer;
06: import org.mortbay.io.nio.NIOBuffer;
07: import org.mortbay.jetty.AbstractConnector;
08:
09: /* ------------------------------------------------------------ */
10: /**
11: * @author gregw
12: *
13: */
14: public abstract class AbstractNIOConnector extends AbstractConnector
15: implements NIOConnector {
16: private boolean _useDirectBuffers = true;
17:
18: /* ------------------------------------------------------------------------------- */
19: public boolean getUseDirectBuffers() {
20: return _useDirectBuffers;
21: }
22:
23: /* ------------------------------------------------------------------------------- */
24: /**
25: * @param direct If True (the default), the connector can use NIO direct buffers.
26: * Some JVMs have memory management issues (bugs) with direct buffers.
27: */
28: public void setUseDirectBuffers(boolean direct) {
29: _useDirectBuffers = direct;
30: }
31:
32: /* ------------------------------------------------------------------------------- */
33: protected Buffer newBuffer(int size) {
34: // TODO
35: // Header buffers always byte array buffers (efficiency of random access)
36: // There are lots of things to consider here... DIRECT buffers are faster to
37: // send but more expensive to build and access! so we have choices to make...
38: // + headers are constructed bit by bit and parsed bit by bit, so INDiRECT looks
39: // good for them.
40: // + but will a gather write of an INDIRECT header with a DIRECT body be any good?
41: // this needs to be benchmarked.
42: // + Will it be possible to get a DIRECT header buffer just for the gather writes of
43: // content from file mapped buffers?
44: // + Are gather writes worth the effort? Maybe they will work well with two INDIRECT
45: // buffers being copied into a single kernel buffer?
46: //
47: Buffer buf = null;
48: if (size == getHeaderBufferSize())
49: buf = new NIOBuffer(size, NIOBuffer.INDIRECT);
50: else
51: buf = new NIOBuffer(size,
52: _useDirectBuffers ? NIOBuffer.DIRECT
53: : NIOBuffer.INDIRECT);
54: return buf;
55: }
56:
57: }
|