使用java.nio选择器读取完整客户端的请求

时间:2014-04-21 08:53:26

标签: java nio

我正在写一个基于nio的http服务器。我需要先收集完整客户端的请求,然后再将其传递给工作线程。

在SelectionKey.OP_READ中收集完整客户端请求的最佳方法是什么?

现在我正在考虑将ByteBuffer加到选择器的键上加倍:

while(keyIterator.hasNext()) {
    ...
    if(key.isAcceptable()) {
        ...
        key.attach(ByteBuffer.allocate(BUFFER_SIZE));
    }
    if(key.isReadable()) {
        SocketChannel clientsc = (SocketChannel) key.channel();
        ByteBuffer buffer = (ByteBuffer) key.attachment();
        if(buffer.remaining() < MIN_BUFFER_SIZE) {
            buffer = grow(buffer, BUFFER_SIZE * 2);
            key.attach(buffer);
        }
        clientsc.read(buffer);
        ...
    }
}

但这个解决方案看起来不是最优的。还有更好的方法吗?

0 个答案:

没有答案