自定義的Server實(shí)例和默認(rèn)的DefaultServer
Server類型的Accept方法和全局的Accept函數(shù)的作用如下
1. Server 類型的 Accept 方法
Server類型的Accept方法是一個(gè)實(shí)例方法,用于處理特定的Server實(shí)例。它接受一個(gè)net.Listener,并為每個(gè)新連接啟動一個(gè)協(xié)程來處理請求。
-
作用
-
從net.Listener中接受新的連接。
-
為每個(gè)新連接啟動一個(gè)協(xié)程,調(diào)用server.ServeConn(conn)來處理連接。
-
如果接受連接時(shí)發(fā)生錯誤,記錄錯誤并退出循環(huán)。
2. 全局的 Accept 函數(shù)
全局的Accept函數(shù)是一個(gè)包裝函數(shù),用于提供默認(rèn)行為。它調(diào)用了DefaultServer的Accept方法。
-
作用:
-
提供一個(gè)全局的Accept函數(shù),方便用戶使用默認(rèn)的Server實(shí)例。
-
如果用戶沒有創(chuàng)建自己的Server實(shí)例,可以直接調(diào)用Accept函數(shù)來啟動服務(wù)器。
-
3.為什么定義兩個(gè)?
-
靈活性:
- Server類型的Accept方法允許用戶創(chuàng)建自己的Server實(shí)例,并傳入自定義的Server實(shí)例。
- 全局的Accept函數(shù)提供了一個(gè)默認(rèn)的Server實(shí)例,方便用戶快速啟動服務(wù)器,而不需要手動創(chuàng)建Server實(shí)例。
-
默認(rèn)行為:
- DefaultServer是一個(gè)全局的默認(rèn)Server實(shí)例,通常在包初始化時(shí)創(chuàng)建。
- 全局的Accept函數(shù)允許用戶在不需要自定義Server實(shí)例的情況下,直接使用默認(rèn)的Server實(shí)例。
4.關(guān)鍵代碼
type Server struct{}
var DefaultServer = &Server{}
func (server *Server) Accept(lis net.Listener) {
for {
conn, err := lis.Accept()
if err != nil {
log.Println("rpc server: accept error:", err) return } go server.ServeConn(conn)
}
}
func Accept(lis net.Listener) {
DefaultServer.Accept(lis)
}
在main函數(shù)中使用 Server 類型的 Accept 方法
// 創(chuàng)建一個(gè)自定義的 Server 實(shí)例
server := &Server{}
// 使用自定義的 Server 實(shí)例
server.Accept(listener)
在main函數(shù)中使用全局的 Accept 函數(shù)
// 使用默認(rèn)的 Server 實(shí)例
Accept(listener)
Server類型的Accept方法:允許用戶創(chuàng)建自己的Server實(shí)例,并傳入自定義的Server實(shí)例。
全局的Accept函數(shù):提供一個(gè)默認(rèn)的Server實(shí)例,方便用戶快速啟動服務(wù)器,而不需要手動創(chuàng)建Server實(shí)例。
5.自定義的Server實(shí)例和默認(rèn)的DefaultServer有什么區(qū)別?
自定義的Server實(shí)例
自定義的Server實(shí)例允許用戶創(chuàng)建自己的Server對象,并根據(jù)需要對其進(jìn)行配置和擴(kuò)展。這提供了更高的靈活性和控制權(quán),用戶可以根據(jù)自己的需求定制服務(wù)器的行為。
優(yōu)點(diǎn)
用戶可以根據(jù)自己的需求配置服務(wù)器的行為,例如設(shè)置超時(shí)時(shí)間、中間件、日志記錄等;用戶可以擴(kuò)展Server類型,添加自定義的方法和字段,以滿足特定的需求;每個(gè)Server實(shí)例是獨(dú)立的,用戶可以同時(shí)運(yùn)行多個(gè)不同的服務(wù)器實(shí)例,每個(gè)實(shí)例都有自己的配置和行為。
默認(rèn)的DefaultServer實(shí)例
DefaultServer是一個(gè)全局的默認(rèn)Server實(shí)例,通常在包初始化時(shí)創(chuàng)建。它提供了一個(gè)通用的服務(wù)器實(shí)例,用戶可以直接使用而無需手動創(chuàng)建和配置。
優(yōu)點(diǎn)
用戶可以直接使用DefaultServer,而無需手動創(chuàng)建和配置服務(wù)器實(shí)例;DefaultServer提供了一組通用的默認(rèn)配置,適用于大多數(shù)場景。