Wenn Sie „admin.nodeInfo“ in die Javascript-Konsole eingeben, sehen Sie Folgendes:
listenAddr: "[::]:<value>",
name: "Geth/v1.6.1-stable-021c3c28/linux-amd64/go1.8.1",
ports: {
discovery: <value>,
listener: <value>
},
(Natürlich zusammen mit ein paar anderen Sachen.)
Wir haben also diese drei Ports: listenAddr, listener, discovery. Was bedeutet jeder von ihnen in diesem Zusammenhang.
Ich frage nicht nach dem RPC-Port oder dem Websockets-Port. Ich frage speziell nach dem, was ich gerade erwähnt habe.
Grundsätzlich gibt es drei wichtige Ports. Der erste ist der Discovery-Port und die anderen beiden sind Listener-Ports:
Alle von ihnen sind unabhängige Prozesse und können daher nicht auf denselben Ports ausgeführt werden.
listenAddr ist eine Adresse, dh enthält IP+Portnummer
listener ist nur eine Portnummer
Discovery ist auch eine Portnummer zum Finden neuer Peers
Das Wort listener
hat zum Beispiel die Bedeutung eines verbindenden Tors, dies ist ein weiteres Stück der Quelle von Ethereum ('node/node.go'):
ipcListener net.Listener // IPC RPC listener socket to serve API requests
httpListener net.Listener // HTTP RPC listener socket to server API requests
wsListener net.Listener // Websocket RPC listener socket to server API requests
In Go
Listener
ist ein Standardtyp:
A Listener is a generic network listener for stream-oriented protocols.
Multiple goroutines may invoke methods on a Listener simultaneously.
type Listener interface {
// Accept waits for and returns the next connection to the listener.
Accept() (Conn, error)
// Close closes the listener.
// Any blocked Accept operations will be unblocked and return errors.
Close() error
// Addr returns the listener's network address.
Addr() Addr
}
Dies ist die Bedeutung des Wortes listener
, ist aber ListenAddr
die vollständige Adresse des Sockets. Es ist im Linux-Kernel als diese Struktur definiert:
#include <netinet/in.h>
struct sockaddr_in {
short sin_family; // e.g. AF_INET
unsigned short sin_port; // e.g. htons(3490)
struct in_addr sin_addr; // see struct in_addr, below
char sin_zero[8]; // zero this if you want to
};
Die Felder sin_addr
und sin_port
sind zusammen die Variable listenAddr
, eigentlich sollte die Methode dies Addr()
zurückgeben.
Aber im Ethereum-Code listener
verweisen sie nicht auf das Interface listener
oder das Objekt, das die Listener-Schnittstelle implementiert, sondern auf die port number
.
listenAddr
einen Port nennen, verstehen Sie nicht, dass eine Adresse im Internet aus 2 Dingen besteht, einer IP-Adresse und einer Portnummer. Sonst würden Sie keinen listenAddr
Hafen anlaufen, wenn Sie das wüssten. Außerdem bedeutet ein doppelter Doppelpunkt in Ihrem Beispiel, dass es sich um eine IPv6-Adresse handelt und einen Nullwert hat. Dies ist die Notation, die verwendet wird, um eine Adresse voller Nullen auszudrücken. Ihre Frage ist aus diesem Grund falsch, hier gibt es keine 3 Ports, sondern nur 2 Ports.
0xcaff
Stein.212
Bedeutung
Stein.212
Bedeutung