首页 > 解决方案 > 在 Go 中创建多个 http Server 实例不起作用

问题描述

我正在尝试在我的 go lang 应用程序中创建 2 个 HTTP 服务器,这就是我尝试实现它的方式:

package main

import (
    "net/http"
)

func main() {

    server := http.Server{
        Addr:    ":9000",
        //Handler:  http.HandleFunc("/", hello)
    }
    server.ListenAndServe()


    server2 := http.Server{
        Addr:    ":8000",
        //Handler:  http.HandleFunc("/", hello)
    }
    server2.ListenAndServe()

}

我遇到的问题是当我去浏览器向http://localhost:9000/它发出请求时,但是当我向浏览器发出请求时,http://localhost:8000/我得到“无法访问站点”。为什么我不能在 Go 中创建 HTTP 服务器的实例?

标签: go

解决方案


就像Tim Cooper所说ListenAndServe的阻塞,所以第一个服务器启动,但随后没有进行第二个调用。解决此问题的一种简单方法是从server自己的 goroutine 开始,例如

func main() {

    server := http.Server{
        Addr:    ":9000",
        //Handler:  http.HandleFunc("/", hello)
    }
    go server.ListenAndServe()


    server2 := http.Server{
        Addr:    ":8000",
        //Handler:  http.HandleFunc("/", hello)
    }
    server2.ListenAndServe()

}

推荐阅读