gpt4 book ai didi

go - 有没有一种方法可以优化该代码? Go中的TCP服务器

转载 作者:行者123 更新时间:2023-12-01 20:24:47 27 4
gpt4 key购买 nike

编码员。这是基本的tcp服务器,它接受连接,读取传入的数据并回写。

    package main

import (
"bufio"
"io"
"log"
"net"
)

func main() {
li, err := net.Listen("tcp", ":8080")
if err != nil {
log.Fatalln(err)
}

defer li.Close()

for {
conn, err := li.Accept()
if err != nil {
log.Fatalln(err)
}

scanner := bufio.NewScanner(conn)

for scanner.Scan() {
ln := scanner.Text()
io.WriteString(conn, ln+"\n")
}

conn.Close()
}

}


但是,存在用于扫描程序的嵌套循环,并在每次外部循环迭代时声明新的扫描程序。我听说嵌套循环导致额外的复杂性,并且可能在无限循环的每次迭代中声明新的扫描程序会导致一些内存泄漏。其实,我不知道该怎么做,我只想问两件事:
  • 是否可以通过其他方式执行相同操作?
  • 我们实际上是否需要在这样的低级服务器上进行更多优化
    抽象?
  • 最佳答案

    外循环正在等待新的连接,内循环正在解析输入数据,因此从这个角度来看很好。并非所有嵌套循环都是邪恶的。但是,当您处理单个连接时,服务器不再接受它们(可以通过尝试从多个客户端连接到服务器来进行测试)。要解决此问题,请在goroutine中处理连接:

    for {
    conn, err := li.Accept()
    if err != nil {
    log.Fatalln(err)
    }

    go func() {
    defer conn.Close()
    scanner := bufio.NewScanner(conn)

    for scanner.Scan() {
    ln := scanner.Text()
    io.WriteString(conn, ln+"\n")
    }
    }()
    }

    关于go - 有没有一种方法可以优化该代码? Go中的TCP服务器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62129512/

    27 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com