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

ug

编码员。这是基本的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()
        }

    }

但是,存在用于扫描程序的嵌套循环,并在每次外部循环迭代时声明新的扫描程序。我听说嵌套循环导致额外的复杂性,并且可能在无限循环的每次迭代中声明新的扫描程序会导致一些内存泄漏。其实,我不知道该怎么做,我只想问两件事:

  1. 是否可以通过其他方式执行相同操作?

  2. 我们实际上是否需要对这种低级服务器
    抽象进行更多优化

这确实不假

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有一种方法可以在php中优化此mysql代码?

来自分类Dev

有没有一种方法可以确定Java中的应用程序服务器名称

来自分类Dev

有没有一种方法可以快速清除MarkLogic中的服务器错误日志?

来自分类Dev

有没有一种方法可以确定Java中的应用程序服务器名称

来自分类Dev

有没有一种方法可以优化Spark sql代码?

来自分类Dev

进程启动后,有没有一种方法可以阻止Eclipse发布到服务器?

来自分类Dev

有没有一种方法可以在线访问Ubuntu服务器的实时命令外壳?

来自分类Dev

有没有一种方法可以自动插入在链接服务器上更新的行?

来自分类Dev

服务器启动后,有没有一种方法可以自动执行MySQL过程

来自分类Dev

有没有一种方法可以在多个Windows服务器上并行运行命令

来自分类Dev

有没有一种方法可以将Signalr用作纯websocket服务器[ws://]?

来自分类Dev

有没有一种方法可以在没有停机的情况下更新net / http服务器中的TLS证书?

来自分类Dev

有没有一种方法可以优化此DP程序中的空间?

来自分类Dev

有没有一种方法可以让我的漫游器检查DM并将其发布到服务器中的通道中?

来自分类Dev

有没有一种方法可以在类内部的装饰器中引用该实例?

来自分类Dev

在vertx中,有没有一种方法可以更改标头并重定向到另一台服务器

来自分类Dev

有没有一种方法可以在具有远程服务器域的远程服务器上以开发模式在Rails上启动ruby

来自分类Dev

有没有一种方法可以在具有远程服务器域的远程服务器上以开发模式启动Rails上的ruby

来自分类Dev

有没有一种方法可以将提琴手发送(wcf rest)json请求内容到服务器上的对象类型中?

来自分类Dev

有没有一种方法可以在Java应用程序中创建Websocket客户端来与Node.js Websocket服务器通信?

来自分类Dev

有没有一种方法可以使用Google Doc Service打开存储在我的AWS服务器中的文档?

来自分类Dev

有没有一种方法可以在原始代码中插入原始javascript?

来自分类Dev

在AFNetworking 2.0中,有没有一种方法可以简化这样的代码?

来自分类Dev

有没有一种方法可以从代码中调用GoogleSpreadSheet插件?

来自分类Dev

有没有一种方法可以在Java中创建条件比较器?

来自分类Dev

有没有一种方便的方法可以在SSH会话中从服务器提取文件?

来自分类Dev

有没有一种方法可以优化SMR硬盘驱动器?

来自分类Dev

有没有一种方法可以刷新集群上的所有文件,以便从数据库中删除主服务器和从服务器上的所有密钥

来自分类Dev

有没有一种方法可以优化此查询

Related 相关文章

  1. 1

    有没有一种方法可以在php中优化此mysql代码?

  2. 2

    有没有一种方法可以确定Java中的应用程序服务器名称

  3. 3

    有没有一种方法可以快速清除MarkLogic中的服务器错误日志?

  4. 4

    有没有一种方法可以确定Java中的应用程序服务器名称

  5. 5

    有没有一种方法可以优化Spark sql代码?

  6. 6

    进程启动后,有没有一种方法可以阻止Eclipse发布到服务器?

  7. 7

    有没有一种方法可以在线访问Ubuntu服务器的实时命令外壳?

  8. 8

    有没有一种方法可以自动插入在链接服务器上更新的行?

  9. 9

    服务器启动后,有没有一种方法可以自动执行MySQL过程

  10. 10

    有没有一种方法可以在多个Windows服务器上并行运行命令

  11. 11

    有没有一种方法可以将Signalr用作纯websocket服务器[ws://]?

  12. 12

    有没有一种方法可以在没有停机的情况下更新net / http服务器中的TLS证书?

  13. 13

    有没有一种方法可以优化此DP程序中的空间?

  14. 14

    有没有一种方法可以让我的漫游器检查DM并将其发布到服务器中的通道中?

  15. 15

    有没有一种方法可以在类内部的装饰器中引用该实例?

  16. 16

    在vertx中,有没有一种方法可以更改标头并重定向到另一台服务器

  17. 17

    有没有一种方法可以在具有远程服务器域的远程服务器上以开发模式在Rails上启动ruby

  18. 18

    有没有一种方法可以在具有远程服务器域的远程服务器上以开发模式启动Rails上的ruby

  19. 19

    有没有一种方法可以将提琴手发送(wcf rest)json请求内容到服务器上的对象类型中?

  20. 20

    有没有一种方法可以在Java应用程序中创建Websocket客户端来与Node.js Websocket服务器通信?

  21. 21

    有没有一种方法可以使用Google Doc Service打开存储在我的AWS服务器中的文档?

  22. 22

    有没有一种方法可以在原始代码中插入原始javascript?

  23. 23

    在AFNetworking 2.0中,有没有一种方法可以简化这样的代码?

  24. 24

    有没有一种方法可以从代码中调用GoogleSpreadSheet插件?

  25. 25

    有没有一种方法可以在Java中创建条件比较器?

  26. 26

    有没有一种方便的方法可以在SSH会话中从服务器提取文件?

  27. 27

    有没有一种方法可以优化SMR硬盘驱动器?

  28. 28

    有没有一种方法可以刷新集群上的所有文件,以便从数据库中删除主服务器和从服务器上的所有密钥

  29. 29

    有没有一种方法可以优化此查询

热门标签

归档