Si escribe "admin.nodeInfo" en la consola de JavaScript, verá:
listenAddr: "[::]:<value>",
name: "Geth/v1.6.1-stable-021c3c28/linux-amd64/go1.8.1",
ports: {
discovery: <value>,
listener: <value>
},
(junto con un montón de otras cosas, por supuesto).
Entonces tenemos estos tres puertos: listenAddr, listener, discovery. Qué significa cada uno de ellos en este contexto.
No estoy preguntando sobre el puerto RPC o el puerto websockets. Estoy preguntando específicamente sobre lo que acabo de mencionar.
Hay básicamente tres puertos importantes. El primero es el puerto de descubrimiento y los otros dos son puertos de escucha:
Todos ellos son procesos independientes y, por lo tanto, no se pueden ejecutar en los mismos puertos.
listenAddr es una dirección, es decir, contiene IP+número de puerto
el oyente es solo un número de puerto
descubrimiento es también número de puerto para encontrar nuevos pares
La palabra listener
tiene el significado de una puerta de conexión, por ejemplo, esta es otra parte de la fuente de 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
En Go
Listener
es un tipo estándar:
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
}
Este es el significado de la palabra listener
, pero ListenAddr
es la dirección completa del socket. se define en el kernel de Linux como esta estructura:
#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
};
Los campos sin_addr
y sin_port
juntos es la variable , de hecho, esto es lo que debería devolver listenAddr
el método .Addr()
Pero en el código de Ethereum, al decir listener
que no se refieren al Interface listener
objeto que implementa la interfaz de escucha, se refieren al port number
.
listenAddr
un puerto, entonces no entiende que una dirección en Internet se compone de 2 cosas, una dirección IP y un número de puerto. De lo contrario, no llamarías listenAddr
a un puerto si supieras eso. Además, dos puntos dobles en su ejemplo significa que es una dirección IPv6 y tiene un valor nulo, esa es la notación utilizada para expresar una dirección llena de ceros. Su pregunta es incorrecta debido a esto, no hay 3 puertos aquí, solo 2 puertos.
0xcafe
piedra.212
significado
piedra.212
significado