阅读量:1
以下是使用Go的WaitGroup实现高并发服务器的示例代码:
package main import ( "fmt" "net" "sync" ) func handleRequest(conn net.Conn) { defer conn.Close() // 处理请求的逻辑,这里只是简单地回复一个消息 message := "Hello from server" conn.Write([]byte(message)) } func main() { // 创建一个WaitGroup来等待所有goroutine完成 var wg sync.WaitGroup // 启动并发服务器监听端口 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() }
在上面的代码中,我们首先创建了一个sync.WaitGroup
来等待所有的goroutine完成。然后,我们启动一个并发服务器监听端口,并在接受到客户端连接时,为每个连接创建一个goroutine来处理请求。在处理请求的goroutine中,我们调用wg.Add(1)
来表示一个新的goroutine开始,并在请求处理完成时调用wg.Done()
来表示该goroutine结束。最后,我们在主函数中调用wg.Wait()
来等待所有的goroutine完成。
请注意,上面的示例代码仅涵盖了基本的并发服务器实现,实际情况中可能需要更复杂的逻辑来处理并发请求。此外,还应该考虑资源管理、错误处理等方面的问题。