V2EX = way to explore
V2EX 是一个关于分享和探索的地方
Sign Up Now
For Existing Member  Sign In
zeroday
V2EX  ›  问与答

golang 写了一个 Udp 服务端的程序,怎么改进支持多并发?

  •  
  •   zeroday · Oct 19, 2015 · 6504 views
    This topic created in 3853 days ago, the information mentioned may be changed or developed.
    package main
    
    import (
        "fmt"
        "net"
        "os"
        "time"
    )
    
    func main() {
        service := ":1200"
        udpAddr, err := net.ResolveUDPAddr("udp4", service)
        checkError(err)
        conn, err := net.ListenUDP("udp", udpAddr)
        checkError(err)
        for {
            handleClient(conn)
        }
    }
    func handleClient(conn *net.UDPConn) {
        var buf [512]byte
        _, addr, err := conn.ReadFromUDP(buf[0:])
        if err != nil {
            return
        }
        daytime := time.Now().String()
        conn.WriteToUDP([]byte(daytime), addr)
    }
    func checkError(err error) {
        if err != nil {
            fmt.Fprintf(os.Stderr, "Fatal error ", err.Error())
            os.Exit(1)
        }
    }
    

    试着用 go 关键字

    for {
            go handleClient(conn)
        }
    

    引起系统 load average 过高到 400 over. 同时 client 只能响应一个请求。

    3 replies    2015-10-19 20:33:41 +08:00
    sakeven
        1
    sakeven  
       Oct 19, 2015 via iPhone
    go handleclient
    jjjabc
        2
    jjjabc  
       Oct 19, 2015
    main 里面不要用 go ,在 handleClient 里面用
    func handleClient(conn *net.UDPConn) {
    var buf [512]byte
    _, addr, err := conn.ReadFromUDP(buf[0:])
    if err != nil {
    return
    }
    go {
    daytime := time.Now().String()
    conn.WriteToUDP([]byte(daytime), addr)
    }
    }
    jjjabc
        3
    jjjabc  
       Oct 19, 2015
    回复能用 Markdown ?
    ```
    func handleClient(conn *net.UDPConn) {
    var buf [512]byte
    _, addr, err := conn.ReadFromUDP(buf[0:])
    if err != nil {
    return
    }
    go {
    daytime := time.Now().String()
    conn.WriteToUDP([]byte(daytime), addr)
    }
    }
    ```
    About   ·   Help   ·   Advertise   ·   Blog   ·   API   ·   FAQ   ·   Solana   ·   5945 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 60ms · UTC 03:35 · PVG 11:35 · LAX 20:35 · JFK 23:35
    ♥ Do have faith in what you're doing.