Go-Ethereum
從 admin.nodeinfo 定義“listen”、“listenaddr”和“discovery”埠?
如果您在 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 埠。我特意問的是我剛才提到的那件事。
基本上有三個重要的埠。第一個是發現埠,另外兩個是監聽埠:
- 發現埠:(預設為 30303)。該埠用於連接其他 geth 節點。
- RPC 埠:(預設為 8545)。此埠用於向 geth 客戶端發送 JSON-rpc 請求。
- 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
In
Go
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_addr
和sin_port
一起是變數listenAddr
,實際上這就是方法Addr()
應該返回的。但是在乙太坊程式碼中,通過說
listener
它們不指代Interface listener
也不是實現偵聽器介面的對象,他們指的是port number
.