2010-12-20 11 views
0

Die Frage ist über Netzwerk-Programmierung, genauer gesagt Server. Nehmen wir an, es gibt einen Server, der viele Verbindungen verarbeitet und daher über einen hörenden Socket verfügt. Es gibt offensichtlich eine einzige Instanz eines solchen Sockets, das ist klar. Nun habe ich Designs gesehen, die (a) einen Socket für jede Verbindung verwenden, sowohl für eingehende als auch für ausgehende Daten, und (b) zwei Sockets, einen für die eingehenden Daten, einen für die ausgehenden Daten. Was macht das eine oder andere Design präferierbarer? Was sind die möglichen Gründe/Anwendungsfälle für diese beiden Designs? Die Programme, die ich meinte, waren tatsächlich Instant Messenger (zwei von ihnen), aber das gilt theoretisch für jeden Server mit mehreren Verbindungen (jeder Server dann.)Single vs Dual Sockets in Netzwerk-Programmierung

Hoffe, diese Frage ist nicht allzu allgemein, ich nicht im Moment viel über Netzwerkprogrammierung wissen, also frag es. Rapid Googling hat auch nicht geholfen.

Antwort

1

TCP- und UDP-Sockets sind Vollduplex. Es gibt keinen Grund, separate Sockets für die Eingabe von und die Ausgabe an denselben Client zu verwenden. Es ist einfach verschwenderisch, Kernel-Ressourcen doppelt so schnell zu verbrauchen.

+0

OK, so weit ich sehen kann, war das Design (mit Dual Sockets) seit Anfang an fehlerhaft, oder? Oder hätten sie das wegen der Verbindungswiederherstellung im Falle eines Verbindungsverlustes tun können? Trotzdem, danke für die Erklärung, hat es mir gezeigt, in welche Richtung ich weitergehen sollte, soweit TCP Sockets betroffen sind (Duplex ist das Schlüsselwort hier). – iksemyonov

+0

@Semen Semenych: Die Verwendung von zwei Sockeln, wo einer ausreichen würde, hilft Verbindungswiederherstellung in keiner Weise, die ich sehen kann. Es bringt nur die zusätzliche Komplikation mit sich, dass jetzt eine der Verbindungen ausgefallen ist und die andere immer noch oben ist. – EJP