2012-04-13 5 views
0

Ich habe Client-Server-Anwendung - Client auf C++ (unter AIX, mit Bibliothek), und Server auf Java (unter Win und auf AIX, mit java.net. , java.io.). Struktur der Anwendung ist neben
ServerClien-Server-Anwendung. Immer geöffnet Socket

//... 
while (true) 
     { 
      final Socket s = ss.accept(); 
      pool.execute(new Service(s)); 
     } 
// .. 

Service.class get Byte von Eingangs Strean und Bytes senden an otputstream. Und in der Nähe Sockel s

Cleint ist

SendMessage(msg) 
{ 
// ... 
    const int socketFD = OpenSocket(); 
// send bytes 
// receive bytes 
    close(socketFD); 
} 

Frage nächste ist: kann ich einmal offen Buchse auf Client-Seite, Nachrichtens, Nachricht empfangen und nach einiger Zeit neue mesage senden und Neue Nachricht erhalten ohne wieder zu öffnen Steckdose?

Antwort

2

Sicher kannst du. Der Server sollte jedoch verstehen, dass mehr als eine Nachricht erwartet wird, und Service nicht beenden, bis der Client die Verbindung beendet. Das Problem mit Ihrer Implementierung ist, dass der Dienst ein ausführbarer und kein Thread ist. Wenn es beim Empfangen von Nachrichten eine Schleife erhält, behält es den Thread, auf dem es läuft, bei. Wenn Sie FixedThreadPool verwenden, kann dies dazu führen, dass alle Pool-Threads erschöpft sind und der nächste Dienst warten würde, bis einer der vorherigen Clients die Verbindung trennt. Die Verwendung von CachedThreadPool vermeidet dies, aber als Ergebnis entspricht die Anzahl der verwendeten Threads der Anzahl der Clients. Dies ist kein Problem, wenn Sie genug Hauptspeicher haben (jeder Thread verwendet ungefähr 0,5 Mb). Wenn Sie Speicher sparen möchten, können Sie asynchrone Netzwerkbibliotheken wie Apache Netty verwenden. Java 7 hat asynchrone Kanäle implementiert.

https://github.com/rfqu/df4j ist eine einfache Datenflussbibliothek, die einen Wrapper über asynchrone Java7-Netzwerkfunktionen enthält, um die Verwendung zu vereinfachen.

0

Ja sicher. Abgesehen von HTTP verwenden die meisten Protokolle persistente Verbindungen (SMTP, POP3, FTP, ICQ, ...)

Verwandte Themen