Я пытаюсь написать свой HttpServer в JAVA.Производительность на сетях codding
Существует простой код для создания сокетов (сервер и клиент), а также чтение и сбор информации заголовка, как только пользователь пишет URL-адрес.
Я ищу хороший способ (код производительности), который может манипулировать получением/сбором данных.
В моем коде, который я написал, я заполняю, что это кажется плохим.
Может быть, кто может помочь мне объяснить о третьем уровне, попробуйте блок для написания хорошего кода?
Например, я думаю, что if (headerTempData.contains("\r\n\r\n")) break;
будет медленным для потоковой передачи и сбора данных из подключенного сокета, потому что я не знаю, сколько строк заголовков будет загружено, и для всей проверенной информации.
Может быть, кто знает дополнительную точку соответствующей литературы (книги, то есть), которые могут помочь мне понять, для хорошей производительности коды для HTTP протоколов очень помогает мне
Спасибо!
специальный код попытка блока:
try (InputStream raw = socket.getInputStream()) {
String headerTempData = "";
// chain the InputStream to a Reader
Reader reader = new InputStreamReader(raw);
int c;
while ((c = reader.read()) != -1) {
headerTempData += (char) c;
System.out.print((char) c);
if (headerTempData.contains("\r\n\r\n"))
break;
}
System.out.println("- - - - - - - - - - - - EOL - - - - - - - - - - - -");
}
Весь код Пример:
package pk7HttpServer;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.MalformedURLException;
import java.net.ServerSocket;
import java.net.Socket;
/**
* Created by Morris on 08/10/16.
*/
public class HTTPServer {
public static void main(String[] args) {
new HTTPServer().startServer();
}
public void startServer() {
try (ServerSocket serverSocket = new ServerSocket(8080)) {
System.out.println("Server is started");
while (true) {
Socket socket = serverSocket.accept();
try {
try (InputStream raw = socket.getInputStream()) {
String headerTempData = "";
// chain the InputStream to a Reader
Reader reader = new InputStreamReader(raw);
int c;
while ((c = reader.read()) != -1) {
headerTempData += (char) c;
System.out.print((char) c);
if (headerTempData.contains("\r\n\r\n"))
break;
}
System.out.println("- - - - - - - - - - - - EOL - - - - - - - - - - - -");
}
} catch (MalformedURLException ex) {
System.err.println(socket.getLocalAddress() + " is not a parseable URL");
} catch (IOException ex) {
System.err.println(ex.getMessage());
}
}
} catch (Exception ex) {
System.out.println("error# " + ex.getMessage());
}
}
}
Вы проверили его еще? Что заставляет вас думать, что ваш путь неэффективен? Это звучит как преждевременная оптимизация, которая является кандидатом на трату времени. Сосредоточьтесь на оптимизации, когда вы точно знаете, что есть проблема с эффективностью. –
Это для класса или для решения реальной проблемы? – chrylis
Сервер обычно должен обслуживать множество клиентов. Поэтому вы должны передать сокет, который вы получаете от serverSocket.accept(), в собственный поток, который обслуживает этот один запрос. Основной треск возвращается к accept() для готовности к следующему запросу другого клиента. – Heri