Kann mir bitte jemand über aktuelle .NET Socket-Techniken aufklären?
Nicht blockierende Sockets
Wenn ich Socket.Blocking = false setze und Async-Operationen verwende - was wird passieren?
Gibt es eine Möglichkeit, mehrere nicht blockierende Sockets abzufragen, anstatt sie einzeln auf Verfügbarkeit zu prüfen (etwas wie trivial select () oder irgendeinen anderen Mechanismus, der etwas mit IOCP zu tun hat), abgesehen von Socket.Select ( )?
BeginXXX und SocketAsyncEventArgs
Arbeiten sie an Sockeln unter der Haube und verstecken nur die Thread-Erstellung?
Ist die manuelle Erstellung von Threads gleich der Verwendung von BeginXXX-Methoden?
Gibt es noch andere Vorteile bei der Verwendung von SocketAsyncEventArgs, dann erlaubt es, einen Pool von Sockets und alles, was damit zusammenhängt, zu erstellen?
Und eine abschließende Frage: Wenn App als eine Art stark geladener binärer Proxy arbeitet, wobei die meiste Logik in einem einzelnen Thread erledigt wird - was bietet eine bessere Skalierbarkeit: blockierungsfreie Vorgehensweise oder asynchrone Operationen?
1: Socket.Select
sollte das tun, obwohl ich nicht dazu tendiere, diesen Ansatz persönlich zu verwenden; insbesondere diese IList
werden bei hohen Volumina nervig
2: Nein, andersherum; Die Blockierungsoperationen verwenden im Wesentlichen das Nicht-Blockieren im Hintergrund, aber mit Gates. Nein, sie erstellen keine Threads unter der Haube - es sei denn, Sie zählen den Callback, wenn etwas eingeht. Ich habe hier ein Beispiel, das 12k Verbindungen mit SocketAsyncEventArgs
dient - die Thread-Anzahl ist etwa 20. Unter den Absichten von SocketAsyncEventArgs
ist das:
Für Skalierbarkeit: asynchron
Tags und Links .net c# sockets networking nonblocking