Я работаю над сетевыми функциями Cloud Server, используя язык программирования Go. И я столкнулся с проблемой с с одинаковым TCPconn в то же время от разных Goroutines.Go - Чтение данных из TCP-соединения из нескольких считывателей
Вот простой пример
package main
import (
"fmt"
"net"
)
func main() {
addr, _ := net.ResolveTCPAddr("tcp", ":8888")
listener, _ := net.ListenTCP("tcp", addr)
for {
conn, err := listener.AcceptTCP()
if err != nil {
fmt.Println(err)
return
}
go Handle(conn) // output always coming from here
go Handle(conn)
}
}
func Handle(conn *net.TCPConn) {
data := make([]byte, 1024)
fmt.Println("Ok")
for {
len_data, err := conn.Read(data)
fmt.Println(err)
fmt.Println(len_data)
}
}
В этом примере выход консоли всегда наступающем от 1-го goroutine go Handle(conn)
...
Как сделать функциональные возможности чтения из 2 Goroutines в то же время?
Благодаря
Это означает, что он должен был бы держать все данные в памяти. – OneOfOne
Нет, если он установил правильный размер буфера для канала. – Cooy
нет? он должен будет создать канал для каждого запроса, прочитать все данные в буфер, отправить его по каналу. – OneOfOne