Ich bin David, und mein Ziel mit diesem Repository/Artikel ist es, Steckdosen zu entmystifizieren, indem sie versuchen, sie auf einfachste Weise zu erklären.
In diesen Beispielen werde ich NodeJs und Partikel (jede Version) verwenden, um zu zeigen, wie Hardware mit NodeJs sprechen kann, und umgekehrt. Aber machen Sie keinen Fehler, das bedeutet nicht, dass die Werkzeuge, die ich auswähle, die einzige Möglichkeit sind, dies zu tun. Das weiß ich persönlich.
Jedes eingebettete Gerät mit Netzwerkkonnektivität funktioniert ähnlich, und jede Sprache mit Sockets -Unterstützung wird ebenfalls tun.
Die Repo -Struktur
Ich glaube, es gibt ein großes Maß an Rätsel um Steckdosen. Viele Menschen haben sie im Laufe der Jahre beängstigend klingen lassen, und mein Ziel ist es zu beweisen, dass sie nicht so mysteriös oder kompliziert sind. Ich hoffe, dass Sie am Ende über Sockets als einfachere Lösung für ein bestimmtes Problem nachdenken werden.
Vor allem in eingebetteten Systemen, bei denen jeder Byte zählt.
Steckdosen sind die Grundlage für alle Netzwerkkonnektivität. Jedes angeschlossene Gerät verwendet Sockets. Zusätzlich zu Sockets haben Sie Protokolle, die nichts anderes als Regeln sind, die angeben, wie Daten nach Eingang gesendet oder verarbeitet werden sollten. Das beliebte HTTP -Protokoll ist ein Beispiel dafür. Wenn Sie dies wissen, können Sie jedes Gerät mit jeder Sprache mit Socket -Unterstützung nachahmen. Wie? Durch Senden von Bytes, die an bestimmte Protokolle (Regeln) haften. Diese Regeln sind online frei verfügbar.
Sie könnten eine App machen, die vorgibt, a zu sein:
Warum glauben die Leute, dass Socken kompliziert sind?
Wahrscheinlich, weil Menschen dazu neigen, Wörter zu verwenden, die Komplexität vermitteln, wie:
Nur wenn Sie diese wenigen Punkte lesen, denken Sie vielleicht nicht für mich. Aber Steckdosen sind eigentlich sehr einfach. Um beispielsweise eine Antwort von einem Webserver zu erhalten, müssen Sie nur den folgenden Text senden:
GET / HTTP/1.1
Das ist es. Der Server nimmt diesen Text an, analysiert ihn und versteht, dass Sie a:
/contact , um die Kontaktseite zu erhalten.Es gibt nicht viel mehr. Ein Drucker versteht einen anderen Header, in ähnlicher Weise benötigt ein DNS -Server etwas Spezifisches für sein Protokoll (Regeln).
Kaum zu glauben? Verwenden Sie eine Telnet -App, um mit diesem Befehl eine Verbindung zu Ihrer bevorzugten Website herzustellen (nur eine unsichere Verbindung wird über Port 80 unterstützt).
SITE 80GET / HTTP/1.1Für eine sichere Verbindung können Sie OpenSSL wie folgt verwenden:
Openssl s_client -connect google.com:443GET / HTTP/1.1Ein weiteres Beispiel wäre das Senden einer E -Mail, indem Sie direkt an einen SMTP -Server herstellen. Die meisten aktuellen SMTP -Server werden durch Passwörter gesichert und verwenden die Verschlüsselung, wodurch es schwierig ist, dies schnell zu testen. Wenn Sie jedoch Zugriff auf einen einfachen SMTP -Server hätten, können Sie Folgendes eingeben:
telnet example.com smtpHELO client.example.comMAIL from: <[email protected]>RCPT to: <[email protected]>DATAFrom: [email protected]To: [email protected]Subject: Test messageQUITWie Sie sehen können, ist das nicht?
Jetzt, da wir ein besseres Verständnis der Protokolle haben, müssen Sie eine gemeinsame Struktur für die Kommunikation entwerfen. Angenommen, Sie möchten die Temperatur Ihres Hauses an Ihren NodeJS -Server senden. Ihr Strom von Bytes könnte so aussehen:
45,40.1,50,90,100,102.5
Das Komma fungiert als Trennzeichen für jede Messung. Sie können jeden gewünschten Charakter auswählen, aber nur, damit Sie wissen, wird das Komma Ihre Daten mit dem CSV -Format (Comma Separated Values) kompatibel. Am anderen Ende benötigen Sie einen Code, der nach dem Trennzeichen prüft, und wenn dies geschieht, haben Sie Ihren Wert.
Wie Sie aus diesem Beispiel sehen können, gibt es keine Header oder optionalen Daten. Sie entscheiden, was in Ihrem Protokoll passt.
Basierend auf dem obigen Beispiel können Sie Ihrem Protokoll wie folgt Feuchtigkeit hinzufügen:
45:80,40:85,32.1:82,50:89
Auch hier trennt das Komma Ihre Daten, während der Dickdarm Ihren Datensatz unterscheidet. Außerdem: Denken Sie daran, ... Protokolle benötigen gute Dokumentation, sodass andere Entwickler die Daten, die sie verwalten müssen, Sinn machen können.
Eine weitere wichtige Sache ist, dass sein Beispiel über ein ASCII-Protokall spricht, um zu erfahren, wie ein binäres funktioniert.
Computer arbeiten in 1s und 0s, und das ist eine Tatsache. Das Beispiel gibt keine Möglichkeit, eine kompilierte Anwendung von regulären Daten zu unterscheiden. Alles wird als eine Reihe von Bits gespeichert. Dies bedeutet, dass sogar die Daten, die über das Internet gesendet werden, in 1s und 0s liegen.
Sie fragen wahrscheinlich, warum sollte ich mir dann um Typen interessieren. Denn abhängig von Ihrem Typ sind Ihre binären Daten unterschiedlich. Zum Beispiel: Eine Ganzzahl von 1 ist 00000001 , wobei eine Ganzzahl von 31 zu 00011111 wird.
Dies bedeutet, dass Sie am anderen Ende der Verbindung wissen müssen, was Sie bekommen. Angenommen, Sie möchten einen einfachen Vergleich machen.
if ( data == 1 ) {
true
} Wenn Sie Ihre Daten so konvertiert haben, dass sie eine Ganzzahl wäre, sie jedoch als Zeichen gesendet haben, vergleichen Sie Int 31 mit int 1 . Wenn Sie jedoch wissen, dass Sie einen Charakter senden, können Sie ihn mit dem richtigen Typ vergleichen:
if ( data == '1' ) {
true
} Jetzt ist Char 1 tatsächlich 31 und der Vergleich wird funktionieren. In dem Hardware2NodeJS -Beispielordner finden Sie Beispielcode, der den Unterschied in der Praxis erklärt.
Im Internet sind die beiden beliebtesten Protokolle zum Senden von Daten TCP und UDP. Sie werden sehen, dass Personen am Ende des Namens hinzufügen /ip. IP steht für (Internet -Protokoll) und kurz gesagt, Sie können es als Adresssystem des Internets betrachten. Dies bedeutet, dass Sie TCP oder UDP nicht nur im Internet verwenden können, da TCP und UDP die Art und Weise sind, wie die Daten verpackt sind. Welches Adresssystem Sie verwenden, liegt bei Ihnen.
TCP und UDP sind Protokolle, und inzwischen sollten Sie wissen, dass dieses Wort Regeln bedeutet, und diese beiden Protokolle sind nichts anderes als Regeln, die erklären, wie Daten verpackt werden. Das andere Ende versteht die gleichen Regeln und kann die empfangenen Informationen auspacken und umgekehrt.
Der größte Teil des Internets nutzt TCP, da wir die Gewissheit haben möchten, dass das, was wir senden, in seiner Gesamtheit am anderen Ende empfangen wird. Wenn Sie beispielsweise ein Dokument senden, möchten Sie keine Buchstaben oder Wörter fehlen. Wenn bei vielen Formaten Teile im Header fehlen, das dem System mitteilt, wie man die Datei versteht, wird das System Ihnen mitgeteilt, dass die Datei beschädigt ist und nicht gelesen werden kann.
Natürlich gibt es Formate, die widerstandsfähiger sind und keine 100 Prozent der Daten benötigen. Einige Filme, Bilder und Musikformate können beispielsweise einige Inhalte fehlen, und wir leben einfach damit. Ein Bild oder ein Film könnte einige seltsame Artefakte haben; Musik könnte einige Blips und Geräusche haben.
Dieses Protokoll ist sehr nützlich, wenn Daten aus Hardwareprodukten gesendet werden. Nehmen wir an, wir sammeln Sensordaten von vielen Geräten mit einem Mobilfunkmodem, und wir müssen für jedes von uns gesendete Byte bezahlen. In diesem Fall sollten wir Folgendes berücksichtigen: Lohnt es sich, mehr für die höhere Treue zu bezahlen, die wir zu TCP haben würden? Oder ist es besser, den Verlust einiger Messungen zu akzeptieren, aber weniger für unsere Datenübertragung zu zahlen?
Normalerweise würde ich TCP standardmäßig einstellen, aber wenn Sie einen guten Fall dagegen haben, ist UDP Ihre nächstbeste Option.
Ich hoffe, dieses Repository hat Ihnen geholfen, ein besseres Verständnis dafür zu bekommen, was Sockets sind. Wenn etwas unklar war, schlagen Sie mich auf Twitter und ich werde versuchen, alle Punkte im Projekt zu reparieren, die unklar sind.
Ich möchte all den guten Leuten danken, die mir bei diesem Projekt geholfen haben, einschließlich:
Wenn Sie dieses Projekt genossen haben, sollten Sie es in Betracht ziehen, es zu geben? Und schauen Sie sich mein Github -Konto an, in dem Sie zusätzliche Ressourcen finden, die Sie möglicherweise nützlich oder interessant finden.
Dieses Projekt wird Ihnen von 0x4447 LLC gebracht, einem Softwareunternehmen, das sich auf den Aufbau kundenspezifischer Lösungen auf AWS spezialisiert hat. Folgen Sie diesem Link, um mehr zu erfahren: https://0x4447.com. Senden Sie alternativ eine E -Mail an [email protected].