假设我在 linux 中有一个 Tcp 服务器,它会为新的连接创建一个新的 goroutine。当我想向tcp连接写入数据时,我应该这样做吗
conn.Write(data)
或者在 goroutine 中做,特别是为了写作,像这样
func writeRoutine(sendChan chan []byte){
for {
select {
case msg := <- sendChan :
conn.Write(msg)
}
}
}
以防万一网络繁忙。
简而言之,在写入套接字时,我是否需要像在 c/c++ 中一样在 go 中使用写缓冲区?
PS也许我没有清楚地提出问题。
1 我谈到了服务器,意思是在 linux 中运行的 tcp 服务器。它将为新的连接创建一个新的 goroutine。像这样
listener, err := net.ListenTCP("tcp", tcpAddr)
if err != nil {
log.Error(err.Error())
os.Exit(-1)
}
for {
conn, err := listener.AcceptTCP()
if err != nil {
continue
}
log.Debug("Accept a new connection ", conn.RemoteAddr())
go handleClient(conn)
}
2 我认为我的问题与代码无关。众所周知,当我们用size_t write(int fd, const void *buf, size_t count);c/c++写一个socket fd时,对于tcp server来说,你的代码中需要一个socket的写缓冲区,或者可能只有部分数据写入成功。我的意思是,我必须在 go 中这样做吗?
萧十郎
MMTTMM
相关分类