zeroday
V2EX  ›  问与答

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

  •  
  •   zeroday · Oct 19, 2015 · 6522 views
    This topic created in 3857 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   ·   3300 Online   Highest 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 55ms · UTC 00:30 · PVG 08:30 · LAX 17:30 · JFK 20:30
    ♥ Do have faith in what you're doing.