Äußerst zuverlässiger Transaktions-/Signalkopierer (Ideologiediskussion und Entwicklung) - Seite 7

 

GUT. Dann schlage ich vor, die Steckdosenverbindung als Arbeitsmodell zu nehmen.

Схема работы синхронизатора:

- Der Server stellt permanente Socket-Verbindungen zu den Clients her (die Frage, ob jedem Client ein eigener Thread zugewiesen werden soll, wird noch geprüft).
- der Master-Client sendet den aktuellen Stand seiner Aufträge während eines Handelsereignisses
- der Server speichert diese Datei und sendet sie sofort an alle anderen Clients (eine Socket-Verbindung ist bereits aufgebaut)
- der Client empfängt die Datei und ändert den Auftragsstatus entsprechend den empfangenen Daten
- Die zuletzt gespeicherte Datei des Assistenten wird auch an den Client gesendet, wenn sich ein neuer Client verbindet. (für die Erstsynchronisation)

Der Hauptvorteil dieses Systems liegt in den Verkehrseinsparungen:
- Es erfordert keine ständigen Anfragen von Seiten des Kunden. Er erhält sie vom Server je nach Verfügbarkeit
- Ebenso sendet der Master-Client nur dann Daten, wenn Änderungen festgestellt werden

Schutz bei Verbindungsverlust
- der Client sendet alle 5 Sekunden ein "Heartbeat"-Paket (z. B. 2 Byte), um die Kommunikation mit dem Server zu überprüfen
- Der Client initialisiert die Verbindung neu, wenn das Paket erfolglos gesendet wurde (keine Antwort).
- Server tut dasselbe. Wenn innerhalb von 10 Sekunden keine Antwort vom Client eingeht, wird die Socket-Verbindung geschlossen.


Gibt es einen Nachteil bei dieser Verbindung?
- z. B. wie viele Socket-Verbindungen sind maximal möglich?
 
sergeev:

Schutz im Falle eines Verbindungsverlustes
- Der Client sendet alle 5 Sekunden ein "Heartbeat"-Paket (z. B. 2 Byte), um die Kommunikation mit dem Server zu überprüfen

Bei der Kommunikation über das TCP/IP-Transportprotokoll geschieht dies nicht, da die Kommunikation automatisch auf der Socket-Schicht, d. h. durch das Betriebssystem, aufrechterhalten wird. Bei Verbindungsabbrüchen wird auf dem Client eine Ausnahme ausgelöst, deren Handler angeben muss, was genau in einem solchen Fall zu tun ist. Dem Server ist das egal, denn wenn die Verbindung zum Client unterbrochen wird, ist das bereits das Problem des Clients.

sergeev:


- z. B. wie viele Socket-Verbindungen sind maximal möglich?
Für einen Host mit einer IP-Adresse können maximal 65536 Ports verwendet werden, von denen einige bereits durch andere Internetverbindungen belegt sind. Und ein Port wird immer durch den Server-Socket zum Abhören belegt sein.
 
Reshetov:

Wenn Verbindungen unterbrochen werden und auf dem Client eine Ausnahme ausgelöst wird, muss in dessen Handler eine Ausnahme ausgelöst werden

Von welcher Ausnahme sprechen Sie?
Ich spreche von der WS2_32.dll. Übliche Berkeley-Sockets (allerdings in asynchroner Variante). Ich habe dort keine Ausnahmen gesehen. Sie können einen Absturz nur feststellen, indem Sie versuchen, zu senden/zu empfangen.

Es können maximal 65537 Ports für eine IP auf einem Host verwendet werden, von denen einige bereits durch andere Internetverbindungen belegt sind.
Nun, Sie brauchen nur einen Anschluss.
Wie viele Socket-Verbindungen können an diesem Anschluss hergestellt werden?
 
sergeev:

Von welcher Ausnahme sprechen Sie?
Ich spreche von der WS2_32.dll. Gewöhnliche Berkeley-Sockets (allerdings in asynchroner Version). Ich habe dort keine Ausnahmen gesehen. Sie können einen Absturz nur feststellen, indem Sie versuchen, zu senden/zu empfangen.

Nun, Sie brauchen nur einen Anschluss.
Ich bin daran interessiert, wie viele Socket-Verbindungen an diesen Port angeschlossen werden können?

Es gibt nur eine Verbindung pro Anschluss. Damit der Client eine Verbindung herstellen kann, muss er wissen, welche IP- und Portnummer auf dem Server zugewiesen ist. Alternativ können Sie auch einen Domänennamen anstelle der IP-Adresse angeben, der vom Socket über DNS in eine IP-Adresse aufgelöst wird.

Der Server-Socket lauscht auf genau diese Portnummer, um Verbindungen von Clients herzustellen. Wenn der Client eine Verbindung herstellt, gibt der Socket ihm einen anderen Port aus dem Pool der freien Ports, um die Verbindung aufrechtzuerhalten. Der persistente Port wird dann wieder freigegeben und lauscht auf Verbindungen von anderen Clients.

Auf diese Weise werden TCP/IP-Transportprotokollverbindungen hergestellt. All dies geschieht auf der Socket-Schicht, d.h. das Protokoll muss nicht programmiert werden - es ist Standard und bereits fest in der Shared Library des Betriebssystems verdrahtet.

 
etwas, das für die Entwicklung nützlich sein könnte
Dateien:
kopir.zip  397 kb
 
Reshetov:
Wenn ein Client eine Verbindung aufbaut, weist der Socket dem Client einen anderen Port aus dem Pool der freien Ports zu, um die Verbindung aufrechtzuerhalten.

Yuri, danke für die Grundlagen, aber sie sind fehl am Platz. Sie vermitteln das falsche Wissen.

Und das zugewiesene ist überhaupt kein Unsinn, sorry. Vielleicht wenden Sie Hafenkonzepte in zwei verschiedenen Hypostasen an, aber dann arbeiten Sie besser mit akzeptierten Konzepten.

 
SEVER11:
etwas, das für die Entwicklung nützlich sein könnte

Unwahrscheinlich. Unprofessionell.
 
sergeev:


und das hervorgehobene ist Unsinn, sorry. Vielleicht wenden Sie Hafenkonzepte in zwei verschiedenen Formen an, aber dann sollten Sie besser mit akzeptierten Konzepten arbeiten.

Wie man so schön sagt: Es ist Ihr eigenes Problem, wie Sie das Konzept des Hafens anwenden. Ich habe nur erklärt, wie die Ports im TCP/IP-Protokoll verwendet werden. Noch einmal: Das Protokoll ist Standard, d.h. ich habe es nicht erfunden.

Ich bin nicht derjenige, der sie erfunden hat.

Viel Glück!

 
sergeev

Wie ist die Größenordnung des Netzes, wie viele Clients sollen es sein: 1000, 100.000, 10.000, 1.000?

Denn Ihr Server wird bei Tausenden von Kunden wirklich bankrott gehen.

 
Urain:

Wie ist die Größenordnung des Netzes, wie viele Clients sollen es sein: 1000, 100.000, 10.000, 1.000?

Denn Ihr Server wird bei Tausenden von Kunden wirklich bankrott gehen.


Das ist der Punkt. Ich versuche, umfassend zu denken. Natürlich muss man anfangs eine Menge an Skalierbarkeit investieren. Das heißt, das Ziel ist, so viel wie für 1.000h zu tun. Und es spielt keine Rolle, dass nur wenige Menschen sie später nutzen werden.

Deshalb versuche ich jetzt, mich zu entscheiden - entweder Geschwindigkeit oder Mikroverkehr mit Steckdosen. Oder http und eine Menge Verkehr auf der ständigen Jagd nach Kunden für einen neuen Teil der Informationen.