Sockets 在Http Web服务器项目中,获取Http客户端请求的标准数据结构是什么

Sockets 在Http Web服务器项目中,获取Http客户端请求的标准数据结构是什么,sockets,http,webserver,buffer,inputstream,Sockets,Http,Webserver,Buffer,Inputstream,我正在写HTTP网络服务器。在这段代码中,我使用字节数组来获取客户端请求,然后进行处理,但当我调用不同的RequestHandler(即get,Head和其他)时,会出现性能问题 我当前的代码是, byte[] buffer = new byte[BUFFER_SIZE]; InputStream inputStream = new BufferedInputStream(client_socket.getInputStream()); PrintStream printStream = new

我正在写HTTP网络服务器。在这段代码中,我使用字节数组来获取客户端请求,然后进行处理,但当我调用不同的RequestHandler(即
get
Head
和其他)时,会出现性能问题

我当前的代码是,

byte[] buffer = new byte[BUFFER_SIZE];
InputStream inputStream = new BufferedInputStream(client_socket.getInputStream());
PrintStream printStream = new PrintStream(client_socket.getOutputStream());

try {
     buffer_request_size = inputStream.read(buffer, 0, BUFFER_SIZE);

     if (buffer[0] == (byte) 'G'  && buffer[1] == (byte) 'E' && buffer[2] == (byte) 'T' && buffer[3] == (byte) ' ') {
            // CALL GETREQUESTHANDLER TO PROCESS CLIENT REQUEST
     }
     else if(buffer[0] == (byte) 'H' && buffer[1] == (byte) 'E' && buffer[2] == (byte) 'A' && buffer[3] == (byte) 'D' && buffer[4] == (byte) ' ') {
            // CALL HEADREQUESTHANDLER TO PROCESS CLIENT REQUEST
     }
     // SIMILARLY PROCESS OTHER HTTP METHODS IN THE SAME WAY
}
finally {
     inputStream.close();
     printStream.close();
}
但这并不是很好的编码技巧,要逐个检查前三个字符,看它是否为
GET

是否有任何其他数据结构读取客户机请求,并检查第一个单词,并告知这是GET、HEAD还是其他


请帮助我改进上述代码块。

将缓冲区拆分为空白边界处的字符串数组,然后使用字符串比较。使用一个将请求名称映射到处理函数的分派表。如果您不理解我刚才所说的,那么在您职业生涯的这个阶段,编写HTTP服务器对您来说可能太高级了。@barmar我编写了全部代码。但是我使用了非常基本的步骤。所以,这就是为什么我想从专业的角度来完善我的代码。@Barmar这也不是您在第一篇文章中提到的编写方法,我想问的是,是否有任何库来处理客户端请求?我不知道是否有任何库用于此,因为实现自己的HTTP服务器并不常见。如果有人需要一个web服务器,他们通常会调整其中一个开源项目,而不是编写自己的项目。