J
jacquipre79
Gast
Hallo,
ich hatte vor einigen Tagen schon mal einen Thread eröffnet, aber leider keine Antwort erhalten. Nun habe ich ein ähnliches Problem.
Es ist so, dass wir hier einen Webserver entwickelt haben, der Requests des Browsers (IE) empfängt und diese über jeweils eine Connection (Socket) via Servlets beantwortet. Der Socket wird anschließend geschlossen. Das Problem ist, dass dieses Neuaufbauen von Verbindungen und Schließen dieser zu Performance-Problemen geführt hat. Deshalb jetzt die Idee, eine Verbindung für mehrere Requests offen zu halten. Ich habe das soweit versucht, zu implementieren. In meinem Testbeispiel werden nun nicht mehr 8 Verbindungen geöffnet, also so:
Stattdessen werden jetzt 2 Verbindungen geöffnet, was ich nicht ganz verstehe, weil ich - so denke ich - den Code so geschrieben habe, dass nur eine Verbindung entstehen soll. Im Moment sieht das also so aus:
Habt ihr eine Ahnung woran das liegen könnte?
Hier mal Auszüge aus dem Code zum besseren Verständnis:
Server Klasse
MyConnection - run()
Für Hinweise oder Hilfe wäre ich wirklich sehr dankbar.
jacquipre
ich hatte vor einigen Tagen schon mal einen Thread eröffnet, aber leider keine Antwort erhalten. Nun habe ich ein ähnliches Problem.
Es ist so, dass wir hier einen Webserver entwickelt haben, der Requests des Browsers (IE) empfängt und diese über jeweils eine Connection (Socket) via Servlets beantwortet. Der Socket wird anschließend geschlossen. Das Problem ist, dass dieses Neuaufbauen von Verbindungen und Schließen dieser zu Performance-Problemen geführt hat. Deshalb jetzt die Idee, eine Verbindung für mehrere Requests offen zu halten. Ich habe das soweit versucht, zu implementieren. In meinem Testbeispiel werden nun nicht mehr 8 Verbindungen geöffnet, also so:
Code:
Request A (Connection 1)
Request B (Connection 2)
Request C (Connection 3)
Request D (Connection 4)
Request E (Connection 5)
Request F (Connection 6)
Request G (Connection 7)
Request H (Connection 8)
Stattdessen werden jetzt 2 Verbindungen geöffnet, was ich nicht ganz verstehe, weil ich - so denke ich - den Code so geschrieben habe, dass nur eine Verbindung entstehen soll. Im Moment sieht das also so aus:
Code:
Request A (Connection 1)
Request B (Connection 1)
----- Request C (Connection 2)
Request D (Connection 1)
----- Request E (Connection 2)
Request F (Connection 1)
----- Request G (Connection 2)
Request H (Connection 1)
Habt ihr eine Ahnung woran das liegen könnte?
Hier mal Auszüge aus dem Code zum besseren Verständnis:
Server Klasse
Code:
while (this.isRunning()) {
try {
socket = serverSocket.accept();
synchronized (socket)
{
MyConnection connection = new MyConnection(this, socket);
Thread thread = new Thread(connections, connection, "DEBUG_" + counter );
counter++;
thread.setDaemon(true);
...
}
}
MyConnection - run()
Code:
try
{
while(true)
{
if (socket == null || socket.isClosed()) break;
line = in.readLine();
if (line == null) break;
else if (!readFirstLine && (line.trim().length() > 0))
{
// parse the first Header line
boolean ok = parseFirstHeaderLine(line);
if (!ok) break;
readFirstLine = true;
}
// read header values and add to header map
else if (line.trim().length() > 0)
{
int colonPos = line.indexOf(":");
if (colonPos > 0)
{
String key = line.substring(0, colonPos);
String value = line.substring(colonPos + 1);
headers.put(key, value.trim());
}
}
else
{
checkForPostRequest();
// process request (search servlet and send response)
processRequest();
// request ends, a new request will start
readFirstLine = false;
headers.clear();
requestParameters.clear();
}
}
}
catch(IOException e)
{
...
}
finally
{
// close socket
}
Für Hinweise oder Hilfe wäre ich wirklich sehr dankbar.
jacquipre