Απαιτήσεις: Στον ίδιο διακομιστή, οι διεργασίες επικοινωνούν μεταξύ τους χρησιμοποιώντας ανώνυμους αγωγούς, επώνυμους αγωγούς, αρχεία αντιστοίχισης μνήμης, HTTP, TCP, τυπικές ροές εισόδου/εξόδου κ.λπ. Μερικές φορές οι διακομιστές πρέπει να αναπτύξουν πολλές εφαρμογές και οι εφαρμογές μπορούν πραγματικά να επικοινωνούν μεταξύ τους χρησιμοποιώντας υποδοχές τομέα gRPC και Unix.
αναθεώρηση
Υποδοχές τομέα Unix
Οι υποδοχές Unix Domain Sockets (UDS), Local Sockets ή Interprocess Communication (IPC) είναι τελικά σημεία επικοινωνίας που ανταλλάσσουν δεδομένα μεταξύ διεργασιών που εκτελούνται στο ίδιο λειτουργικό σύστημα Unix ή παρόμοιο με το Unix.
Το όνομα Unix domain socket αναφέρεται στην τιμή της παραμέτρου τομέα που μεταβιβάζεται στη συνάρτηση που δημιούργησε τον πόρο του συστήματος υποδοχής. Επιλέγεται επίσης ο ίδιος τομέας επικοινωνίας. [ 1 ] AF_UNIXAF_LOCAL
Οι έγκυρες τιμές παραμέτρων για το typeUDS είναι:
- SOCK_STREAM (σε σύγκριση με το TCP) – Χρησιμοποιείται για υποδοχές προσανατολισμένες στη ροή
- SOCK_DGRAM (σε σύγκριση με το UDP) – μια υποδοχή προσανατολισμένη στο datagram για τη διατήρηση των ορίων μηνυμάτων (όπως συμβαίνει με τις περισσότερες υλοποιήσεις UNIX, οι υποδοχές datagram τομέα UNIX είναι πάντα αξιόπιστες και δεν αναδιατάσσουν τα datagrams)
- SOCK_SEQPACKET (σε σύγκριση με το SCTP) – Διαδοχικές υποδοχές πακέτων για συνδέσεις που διατηρούν τα όρια των μηνυμάτων και παραδίδουν μηνύματα με τη σειρά με την οποία αποστέλλονται
Το εργαλείο UDS είναι ένα τυπικό στοιχείο του λειτουργικού συστήματος POSIX.
Γιατί να χρησιμοποιήσετε υποδοχές τομέα Unix;
Οι υποδοχές τομέα Unix επιτρέπουν την επικοινωνία μεταξύ διεργασιών σε ένα μόνο μηχάνημα. Γιατί λοιπόν να τα επιλέξετε έναντι του TCP/IP; Για παράδειγμα, στο TCP/IP, μπορείτε να χρησιμοποιήσετε μια διεύθυνση βρόχου επιστροφής (localhost) για επικοινωνία ενός διακομιστή. Στα Windows, γιατί να τα επιλέξετε από τα Windows Naming Pipelines;
Γενικά, υπάρχουν διάφοροι λόγοι για τους οποίους μπορείτε να επιλέξετε να χρησιμοποιήσετε το UDS αντί για το TCP/IP για επικοινωνία μεταξύ διεργασιών:
- Οι υποδοχές τομέα Unix έχουν συνήθως λιγότερα γενικά έξοδα και μεγαλύτερες ταχύτητες μεταφοράς από τη χρήση TCP/IP
- Οι υποδοχές TCP/IP είναι ένας πεπερασμένος πόρος, ενώ οι υποδοχές τομέα Unix δεν έχουν αυστηρά όρια
- Οι υποδοχές τομέα Unix έρχονται σε μορφή αρχείου, επομένως είναι εύκολο να "ανακαλύψετε" γνωστές διαδρομές
- Η ενοποίηση με συστήματα αρχείων προσθέτει επίσης ένα επιπλέον επίπεδο ασφάλειας (εάν δεν έχετε πρόσβαση στη διαδρομή του αρχείου, δεν μπορείτε να αποκτήσετε πρόσβαση στην υποδοχή)
Το πρώτο σημείο είναι εύκολο να γίνει κατανοητό - μια γρήγορη Google θα δείξει ότι τα σημεία αναφοράς UDS και TCP/IP είναι πάντα καλύτερα από το UDS, επειδή όχι μόνο έχει σημαντικά χαμηλότερο λανθάνοντα χρόνο, αλλά και σημαντικά υψηλότερη απόδοση. Αυτό οφείλεται κυρίως στο γεγονός ότι το UDS είναι βελτιστοποιημένο για επικοινωνία με τον ίδιο διακομιστή,Για επικοινωνία IP, ο localhost πρέπει να περάσει από τη στοίβα IP τόσο στην πλευρά του αποστολέα όσο και στην πλευρά του παραλήπτη。
Οι υποδοχές TCP/IP είναι ένας πεπερασμένος πόρος. Μπορείτε να χρησιμοποιήσετε μόνο έως και 65.535 πρίζες κάθε φορά. Εάν προσθέσετε το πρόβλημα, ο μέγιστος αριθμός υποδοχών που TIME_WAIT πραγματικά διαθέσιμες μπορεί να είναι πολύ μικρότερος από αυτήν την τιμή. Η σύνδεση localhost καταναλώνει επίσης πρίζες σε αυτήν την πισίνα. Η έξυπνη χρήση του UDS αποφεύγει αυτό το πρόβλημα. Επιτρέπει την επικοινωνία χωρίς να εξαντλούνται οι υποδοχές TCP/IP.
διακομιστής
Δημιουργήστε ένα νέο έργο κονσόλας .NET 8, αλλάξτε το SDK σε Microsoft.NET.Sdk.Web και διαμορφώστε το ως εξής:
Το Greet.proto έχει διαμορφωθεί ως εξής:
Ο κωδικός έχει ως εξής:
Μετά την έναρξη της μεταγλώττισης, όπως φαίνεται παρακάτω:
πελάτης
Δημιουργήστε ένα νέο έργο κονσόλας .NET 8 και ανατρέξτε στις ακόλουθες βιβλιοθήκες:
Η μέθοδος κλήσης της διεπαφής gRPC καλείται 10 φορές και κάθε κλήση καλείται για 200 χιλιοστά του δευτερολέπτου και ο κωδικός είναι ο εξής:
Ξεκινήστε το έργο και αφού ολοκληρωθεί η εκτέλεση, όπως φαίνεται στο παρακάτω σχήμα:
Αναφορά:
Η σύνδεση με υπερσύνδεσμο είναι ορατή.
Η σύνδεση με υπερσύνδεσμο είναι ορατή. |