golang:net.Conn读得很慢?
发布时间:2020-12-16 09:27:38 所属栏目:大数据 来源:网络整理
导读:我正在使用net.Listen(“tcp”,addr)作为一个小服务器程序,它接受数据并将其存储在服务器上. 在客户端,我有一个c程序,我只是简单地写了4096000 BYTES到socket(连接到我的服务器程序) 客户端的写入在不到一秒钟内完成. 当使用连接net.Conn的Read()函数时,读取
我正在使用net.Listen(“tcp”,addr)作为一个小服务器程序,它接受数据并将其存储在服务器上.
在客户端,我有一个c程序,我只是简单地写了4096000 BYTES到socket(连接到我的服务器程序) 客户端的写入在不到一秒钟内完成. 当使用连接net.Conn的Read()函数时,读取发生得非常慢. 以下是Read()for循环: // Handle the reads var tbuf [81920]byte for { n,err := c.rwc.Read(tbuf[0:]) // Was there an error in reading ? if err != nil { log.Printf("Could not read packet : %s",err.Error()) break } log.Println(n) } return c.rwc的类型为net.Conn 上面代码的输出如下: 2012/12/29 13:45:12 16384 2012/12/29 13:45:12 16018 2012/12/29 13:45:12 16384 2012/12/29 13:45:12 16016 2012/12/29 13:45:13 16384 2012/12/29 13:45:13 16016 2012/12/29 13:45:13 16384 2012/12/29 13:45:13 16016 2012/12/29 13:45:13 16384 2012/12/29 13:45:13 16016 2012/12/29 13:45:13 16384 2012/12/29 13:45:13 16016 2012/12/29 13:45:13 16384 2012/12/29 13:45:13 16016 2012/12/29 13:45:13 16384 2012/12/29 13:45:13 16016 2012/12/29 13:45:13 16384 2012/12/29 13:45:14 16016 2012/12/29 13:45:14 16384 2012/12/29 13:45:14 16016 2012/12/29 13:45:14 16384 2012/12/29 13:45:14 16016 2012/12/29 13:45:14 16384 2012/12/29 13:45:14 16016 2012/12/29 13:45:14 16384 2012/12/29 13:45:14 16016 2012/12/29 13:45:14 16384 2012/12/29 13:45:14 16016 2012/12/29 13:45:14 16384 2012/12/29 13:45:14 16016 2012/12/29 13:45:15 16384 2012/12/29 13:45:15 16016 2012/12/29 13:45:15 16384 2012/12/29 13:45:15 16016 2012/12/29 13:45:15 16384 2012/12/29 13:45:15 16016 2012/12/29 13:45:15 16384 2012/12/29 13:45:15 16016 2012/12/29 13:45:15 16384 2012/12/29 13:45:15 16016 2012/12/29 13:45:15 16384 2012/12/29 13:45:15 16016 2012/12/29 13:45:15 16384 2012/12/29 13:45:16 16016 2012/12/29 13:45:16 16384 2012/12/29 13:45:16 16016 2012/12/29 13:45:16 16384 2012/12/29 13:45:16 16016 2012/12/29 13:45:16 16384 2012/12/29 13:45:16 16016 2012/12/29 13:45:16 16384 2012/12/29 13:45:16 16016 2012/12/29 13:45:18 16384 2012/12/29 13:45:18 16016 2012/12/29 13:45:19 16384 2012/12/29 13:45:19 16016 2012/12/29 13:45:19 16384 2012/12/29 13:45:19 16016 2012/12/29 13:45:19 16384 2012/12/29 13:45:19 16016 2012/12/29 13:45:19 16384 2012/12/29 13:45:19 16016 2012/12/29 13:45:19 16384 2012/12/29 13:45:19 16016 2012/12/29 13:45:19 16384 2012/12/29 13:45:19 16016 2012/12/29 13:45:19 16384 2012/12/29 13:45:20 16016 2012/12/29 13:45:20 16384 2012/12/29 13:45:20 16016 2012/12/29 13:45:20 16384 2012/12/29 13:45:20 16016 2012/12/29 13:45:20 16384 2012/12/29 13:45:20 16016 2012/12/29 13:45:20 16384 2012/12/29 13:45:20 16016 2012/12/29 13:45:20 16384 2012/12/29 13:45:20 16016 2012/12/29 13:45:20 16384 2012/12/29 13:45:20 16016 2012/12/29 13:45:21 16384 2012/12/29 13:45:21 16016 2012/12/29 13:45:21 16384 2012/12/29 13:45:21 16016 2012/12/29 13:45:21 16384 2012/12/29 13:45:21 16016 2012/12/29 13:45:21 16384 2012/12/29 13:45:21 16016 2012/12/29 13:45:21 16384 2012/12/29 13:45:21 16016 2012/12/29 13:45:21 16384 2012/12/29 13:45:21 16016 2012/12/29 13:45:21 16384 2012/12/29 13:45:22 16016 2012/12/29 13:45:22 16384 2012/12/29 13:45:22 16016 2012/12/29 13:45:22 16384 2012/12/29 13:45:22 16016 2012/12/29 13:45:22 16384 2012/12/29 13:45:22 16016 2012/12/29 13:45:22 16384 2012/12/29 13:45:22 16016 2012/12/29 13:45:22 16384 2012/12/29 13:45:22 16016 2012/12/29 13:45:22 16384 2012/12/29 13:45:22 16016 2012/12/29 13:45:23 16384 2012/12/29 13:45:23 16016 2012/12/29 13:45:23 16384 2012/12/29 13:45:23 16016 2012/12/29 13:45:23 16384 2012/12/29 13:45:23 16016 2012/12/29 13:45:23 16384 2012/12/29 13:45:23 16016 2012/12/29 13:45:23 16384 2012/12/29 13:45:23 16016 2012/12/29 13:45:23 16384 2012/12/29 13:45:23 16016 2012/12/29 13:45:24 16384 2012/12/29 13:45:24 16016 2012/12/29 13:45:24 16384 2012/12/29 13:45:24 16016 2012/12/29 13:45:24 16384 2012/12/29 13:45:24 16016 2012/12/29 13:45:24 16384 2012/12/29 13:45:24 16016 2012/12/29 13:45:24 16384 2012/12/29 13:45:24 16016 2012/12/29 13:45:24 16384 2012/12/29 13:45:24 16016 2012/12/29 13:45:24 16384 2012/12/29 13:45:25 16016 2012/12/29 13:45:25 16384 2012/12/29 13:45:25 16016 2012/12/29 13:45:25 16384 2012/12/29 13:45:25 16016 2012/12/29 13:45:25 16384 2012/12/29 13:45:25 16016 2012/12/29 13:45:25 16384 2012/12/29 13:45:25 16016 2012/12/29 13:45:25 16384 2012/12/29 13:45:25 16016 2012/12/29 13:45:25 16384 2012/12/29 13:45:26 16016 2012/12/29 13:45:26 16384 2012/12/29 13:45:26 16016 2012/12/29 13:45:26 16384 2012/12/29 13:45:26 16016 2012/12/29 13:45:26 16384 2012/12/29 13:45:26 16016 2012/12/29 13:45:26 16384 2012/12/29 13:45:26 16016 2012/12/29 13:45:26 16384 2012/12/29 13:45:26 16016 2012/12/29 13:45:26 16384 2012/12/29 13:45:26 16016 2012/12/29 13:45:27 16384 2012/12/29 13:45:27 16016 2012/12/29 13:45:27 16384 2012/12/29 13:45:27 16016 2012/12/29 13:45:27 16384 2012/12/29 13:45:27 16016 2012/12/29 13:45:27 16384 2012/12/29 13:45:27 16016 2012/12/29 13:45:27 16384 2012/12/29 13:45:28 16016 2012/12/29 13:45:28 16384 2012/12/29 13:45:29 16016 2012/12/29 13:45:29 16384 2012/12/29 13:45:29 16016 2012/12/29 13:45:29 16384 2012/12/29 13:45:29 16016 2012/12/29 13:45:29 16384 2012/12/29 13:45:29 16016 2012/12/29 13:45:29 16384 2012/12/29 13:45:29 16016 2012/12/29 13:45:29 16384 2012/12/29 13:45:29 16016 2012/12/29 13:45:29 16384 2012/12/29 13:45:30 16016 2012/12/29 13:45:30 16384 2012/12/29 13:45:30 16016 2012/12/29 13:45:30 16384 2012/12/29 13:45:30 16016 2012/12/29 13:45:30 16384 2012/12/29 13:45:30 16016 2012/12/29 13:45:30 16384 2012/12/29 13:45:30 16016 2012/12/29 13:45:31 16384 2012/12/29 13:45:31 16016 2012/12/29 13:45:31 16384 2012/12/29 13:45:31 16016 2012/12/29 13:45:32 16384 2012/12/29 13:45:32 16016 2012/12/29 13:45:32 16384 2012/12/29 13:45:32 16016 2012/12/29 13:45:32 16384 2012/12/29 13:45:32 16016 2012/12/29 13:45:32 16384 2012/12/29 13:45:32 16016 2012/12/29 13:45:32 16384 2012/12/29 13:45:32 16016 2012/12/29 13:45:32 16384 2012/12/29 13:45:32 16016 2012/12/29 13:45:32 16384 2012/12/29 13:45:33 16016 2012/12/29 13:45:33 16384 2012/12/29 13:45:33 16016 2012/12/29 13:45:33 16384 2012/12/29 13:45:33 16016 2012/12/29 13:45:33 16384 2012/12/29 13:45:33 16016 2012/12/29 13:45:33 16384 2012/12/29 13:45:33 16016 2012/12/29 13:45:33 16384 2012/12/29 13:45:33 16016 2012/12/29 13:45:33 16384 2012/12/29 13:45:34 16016 2012/12/29 13:45:34 16384 2012/12/29 13:45:34 16016 2012/12/29 13:45:34 16384 2012/12/29 13:45:34 16016 2012/12/29 13:45:34 16384 2012/12/29 13:45:34 16016 2012/12/29 13:45:34 16384 2012/12/29 13:45:34 16016 2012/12/29 13:45:34 16384 2012/12/29 13:45:34 16016 2012/12/29 13:45:34 16384 2012/12/29 13:45:35 16016 2012/12/29 13:45:35 16384 2012/12/29 13:45:35 16016 2012/12/29 13:45:35 16384 2012/12/29 13:45:35 16016 2012/12/29 13:45:35 16384 2012/12/29 13:45:35 16016 2012/12/29 13:45:36 16384 2012/12/29 13:45:36 16016 2012/12/29 13:45:36 16384 2012/12/29 13:45:36 16016 2012/12/29 13:45:37 16384 2012/12/29 13:45:37 16016 2012/12/29 13:45:37 16384 2012/12/29 13:45:37 16016 2012/12/29 13:45:37 16384 2012/12/29 13:45:37 16016 2012/12/29 13:45:37 16384 2012/12/29 13:45:37 16016 2012/12/29 13:45:37 16384 2012/12/29 13:45:37 16016 2012/12/29 13:45:37 4048 正如您所看到的,读取操作需要将近21-25秒才能读取4096000字节, 解决方法
我拿了你的例子,把它变成了一个完整的客户端和服务器示例.在Linux上测试它会在20ms左右传输数据而不会出现意外暂停.
如果在计算机上试用,会得到相同的结果吗?如果是这样,那么怀疑系统的C部分.如果获得与原始帖子相同的暂停,则怀疑您的设置. 服务器代码 package main import ( "io" "log" "net" "time" ) func handle(c net.Conn) { // Handle the reads start := time.Now() tbuf := make([]byte,81920) totalBytes := 0 for { n,err := c.Read(tbuf) totalBytes += n // Was there an error in reading ? if err != nil { if err != io.EOF { log.Printf("Read error: %s",err) } break } log.Println(n) } log.Printf("%d bytes read in %s",totalBytes,time.Now().Sub(start)) c.Close() } func main() { srv,err := net.Listen("tcp",":2000") if err != nil { log.Fatal(err) } log.Println("Listening on localhost:2000") for { conn,err := srv.Accept() if err != nil { log.Fatal(err) } go handle(conn) } } 客户代码 package main import ( "log" "net" "time" ) func handle(c net.Conn) { start := time.Now() tbuf := make([]byte,4096) totalBytes := 0 for i := 0; i < 1000; i++ { n,err := c.Write(tbuf) totalBytes += n // Was there an error in writing? if err != nil { log.Printf("Write error: %s",err) break } log.Println(n) } log.Printf("%d bytes written in %s",time.Now().Sub(start)) c.Close() } func main() { conn,err := net.Dial("tcp",":2000") if err != nil { log.Fatal(err) } log.Println("Sending to localhost:2000") handle(conn) } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |