在 Golang 中,可以使用 net
包提供的 net.Listen
和 net.Accept
函數來實現 TCP 多路復用。以下是一個簡單的示例代碼:
package main
import (
"fmt"
"net"
"os"
)
func main() {
listener, err := net.Listen("tcp", "127.0.0.1:8080")
if err != nil {
fmt.Println("Error listening:", err.Error())
os.Exit(1)
}
defer listener.Close()
fmt.Println("Listening on 127.0.0.1:8080")
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("Error accepting:", err.Error())
os.Exit(1)
}
go handleConnection(conn)
}
}
func handleConnection(conn net.Conn) {
buffer := make([]byte, 1024)
for {
n, err := conn.Read(buffer)
if err != nil {
fmt.Println("Error reading:", err.Error())
return
}
fmt.Println("Received message:", string(buffer[:n]))
_, err = conn.Write([]byte("Message received"))
if err != nil {
fmt.Println("Error writing:", err.Error())
return
}
}
}
在這個示例中,net.Listen
函數用于監聽指定的 TCP 地址,net.Accept
函數用于接受客戶端的連接。handleConnection
函數用于處理每個客戶端的連接,可以在其中執行具體的業務邏輯。使用 go
關鍵字可以將每個連接的處理放在一個獨立的 goroutine 中,從而實現多路復用。
以上示例只是一個簡單的演示,實際應用中可能需要更復雜的處理邏輯,比如使用 select
語句來同時處理多個連接,或者使用 sync.WaitGroup
來等待所有連接處理完成。具體的處理方式根據實際需求而定。