以下是使用Go的WaitGroup實現(xiàn)高并發(fā)服務器的示例代碼:
package main
import (
"fmt"
"net"
"sync"
)
func handleRequest(conn net.Conn) {
defer conn.Close()
// 處理請求的邏輯,這里只是簡單地回復一個消息
message := "Hello from server"
conn.Write([]byte(message))
}
func main() {
// 創(chuàng)建一個WaitGroup來等待所有goroutine完成
var wg sync.WaitGroup
// 啟動并發(fā)服務器監(jiān)聽端口
ln, err := net.Listen("tcp", ":8080")
if err != nil {
fmt.Println("Failed to listen:", err)
return
}
fmt.Println("Server listening on port 8080")
// 接受并處理客戶端連接
for {
conn, err := ln.Accept()
if err != nil {
fmt.Println("Failed to accept connection:", err)
continue
}
// 每個連接啟動一個goroutine來處理請求
wg.Add(1)
go func() {
handleRequest(conn)
wg.Done()
}()
}
// 等待所有goroutine完成
wg.Wait()
}
在上面的代碼中,我們首先創(chuàng)建了一個sync.WaitGroup
來等待所有的goroutine完成。然后,我們啟動一個并發(fā)服務器監(jiān)聽端口,并在接受到客戶端連接時,為每個連接創(chuàng)建一個goroutine來處理請求。在處理請求的goroutine中,我們調用wg.Add(1)
來表示一個新的goroutine開始,并在請求處理完成時調用wg.Done()
來表示該goroutine結束。最后,我們在主函數中調用wg.Wait()
來等待所有的goroutine完成。
請注意,上面的示例代碼僅涵蓋了基本的并發(fā)服務器實現(xiàn),實際情況中可能需要更復雜的邏輯來處理并發(fā)請求。此外,還應該考慮資源管理、錯誤處理等方面的問題。