美文网首页
golang web多种运行方式及多端口监听服务

golang web多种运行方式及多端口监听服务

作者: 哆啦在这A梦在哪 | 来源:发表于2020-12-05 16:08 被阅读0次

    1.监听一个端口的普通http

    func listenServer() {
        http.Handle("/", http.HandlerFunc(lServe))
        http.ListenAndServe(":3002", nil)
    }
    
    func lServe(w http.ResponseWriter, r *http.Request) {
        log.Println("listen serve")
    }
    

    2.自定义路由器,监听多个端口

    func muxServer() {
        mx := http.NewServeMux()
        mx.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
            log.Println("this is 3002")
        })
        go http.ListenAndServe(":3002", mx)//注意这里,不开协程直接就监听阻塞了
    
        mt := http.NewServeMux()
        mt.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
            log.Println("there is 3003")
        })
        http.ListenAndServe(":3003", mt)//这里开启第二个端口监听
    }
    

    3.使用tcp自定义监听多个端口,带上中间件

    func sever() {
        mx := http.NewServeMux()
        l, err := net.Listen("tcp", ":3001")
        if err != nil {
            log.Println(err)
            return
        }
        mx.HandleFunc("/aa", test)
        mx.HandleFunc("/bb", test2)
        http.Serve(l, middle(mx))
    }
    
    func test(w http.ResponseWriter, r *http.Request) {
        log.Println("aa")
    }
    
    func test2(w http.ResponseWriter, r *http.Request) {
        log.Println("bb")
    }
    
    func middle(next http.Handler) http.Handler {
        return next
        //这里可以写入条件,符合的直接反馈next,继续执行,如果有其他逻辑按下面的方法进行逻辑处理
    
        // return http.HandlerFunc(
        //  func(w http.ResponseWriter, r *http.Request) {
        //      log.Println("123")
        //  },
        // )
    }
    
    

    相关文章

      网友评论

          本文标题:golang web多种运行方式及多端口监听服务

          本文链接:https://www.haomeiwen.com/subject/wlygwktx.html