golang实现多路复用
时间: 2023-11-02 18:19:31 浏览: 46
在Go语言中,可以使用标准库中的`net`包来实现多路复用。其中最常用的方法是使用`net.Listen`函数创建一个监听器,然后使用`listener.Accept`方法接受连接请求。
下面是一个简单的示例:
```go
package main
import (
"fmt"
"net"
)
func main() {
listener, err := net.Listen("tcp", "localhost:8080")
if err != nil {
fmt.Println("Error listening:", err.Error())
return
}
defer listener.Close()
fmt.Println("Listening on localhost:8080")
for {
conn, err := listener.Accept()
if err != nil {
fmt.Println("Error accepting connection:", err.Error())
continue
}
go handleRequest(conn)
}
}
func handleRequest(conn net.Conn) {
buf := make([]byte, 1024)
_, err := conn.Read(buf)
if err != nil {
fmt.Println("Error reading:", err.Error())
return
}
fmt.Printf("Received message: %s\n", string(buf))
conn.Write([]byte("Message received."))
conn.Close()
}
```
在这个示例中,我们创建了一个TCP监听器,并在端口`8080`上等待连接。当有连接请求到达时,我们使用`listener.Accept`方法接受连接,并在一个新的goroutine中处理该连接。
在`handleRequest`函数中,我们从连接中读取数据,并将接收到的消息打印到控制台。然后,我们向客户端发送一个确认消息,并关闭连接。
这个示例中只处理了一个连接,但是通过在`handleRequest`函数中启动新的goroutine,我们可以同时处理多个连接。这就是Go语言中的多路复用实现方式。