Go-Ethereum

從 admin.nodeinfo 定義“listen”、“listenaddr”和“discovery”埠?

  • October 7, 2017

如果您在 javascript 控制台中鍵入“admin.nodeInfo”,您將看到:

listenAddr: "[::]:<value>",
 name: "Geth/v1.6.1-stable-021c3c28/linux-amd64/go1.8.1",
 ports: {
   discovery: <value>,
   listener: <value>
 },

(當然還有很多其他的東西。)

所以我們有這三個埠:listenAddr、listener、discovery。在這種情況下,它們中的每一個都意味著什麼。

不是在詢問 RPC 埠或 websockets 埠。我特意問的是我剛才提到的那件事。

基本上有三個重要的埠。第一個是發現埠,另外兩個是監聽埠:

  1. 發現埠:(預設為 30303)。該埠用於連接其他 geth 節點。
  2. RPC 埠:(預設為 8545)。此埠用於向 geth 客戶端發送 JSON-rpc 請求。
  3. Websocket 埠:(預設為 8546)您可以使用 websockets 連接到 geth 客戶端。

它們都是獨立的程序,因此不能在相同的埠上執行。

listenAddr 是一個地址,即包含IP+埠號

listener 只是一個埠號

發現也是尋找新對等點的埠號


這個詞listener有一個連接門的意思,例如,這是另一個乙太坊的來源(’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

InGo Listener是標準類型:

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
   }

這是單詞的意思listener,但是ListenAddr是套接字的完整地址。它在 Linux 核心中被定義為這個結構:

#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
};

欄位sin_addrsin_port一起是變數listenAddr,實際上這就是方法Addr()應該返回的。

但是在乙太坊程式碼中,通過說listener它們不指代Interface listener也不是實現偵聽器介面的對象,他們指的是port number.

引用自:https://ethereum.stackexchange.com/questions/16868