首页 > Go语言中想同时开http服务和监听tcp端口怎么做?

Go语言中想同时开http服务和监听tcp端口怎么做?

具体见代码,程序运行到m.Run()就不往下执行了
也就是说fmt.Println("!!!!!!!")执行不到
我现在想让他们同时工作。

我想他们同时执行

func main() {
    m := martini.Classic()
    m.Get("/device/:serialnumber" , func(params martini.Params) string {
        detail := GetDeviceState(params["serialnumber"])
        result , _ := json.Marshal(detail)
        return string(result)
    })

    m.Get("/device/ctrl/:serialnumber/:state" , func(params martini.Params) string {
        detail := DeviceStateUpdate(params["serialnumber"] , params["state"])
        result , _ := json.Marshal(detail)
        return string(result)
    })

    m.Run()
    fmt.Println("!!!!!!!")
    if len(os.Args) != 2 {
        fmt.Println("Usage:<command> <port>")
        return
    }

    port := os.Args[1]
    tcpAddr, err := net.ResolveTCPAddr("tcp4", "localhost:"+port)
    handleError(err)
    tcpListener, err := net.ListenTCP("tcp4", tcpAddr)
    handleError(err)
    fmt.Println("TCPServer Listening at port:", port)
    defer tcpListener.Close()
    for {
        tcpConn, err := tcpListener.AcceptTCP()
        fmt.Printf("The client:%s has connected!\n", tcpConn.RemoteAddr().String())
        handleError(err)
        defer tcpConn.Close()
        go handleConn(tcpConn)
    }
}


m.Run()是调用

http.ListenAndServe(host+":"+port, m)

这是阻塞的。

所以你要将m.Run()跑在一个goroutine

go m.Run()
【热门文章】
【热门文章】