Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/http/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/algorithm/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何在一个请求后停止HTTP服务功能_Http_Go_Server_Request - Fatal编程技术网

如何在一个请求后停止HTTP服务功能

如何在一个请求后停止HTTP服务功能,http,go,server,request,Http,Go,Server,Request,要使用第三方服务对用户进行身份验证,我需要侦听并等待localport,以便通过该服务获取令牌 如何在一个请求后退出go中的服务器 据我所知,只有ListendServer才能永远做到这一点,但只需打开一个请求即可多亏了@mkopriva,我才能够做到这一点 实际上非常简单,只需手动创建一个服务器对象,然后在handle函数中调用s.Close() s := &http.Server{ Addr: "localhost:8085", } http.HandleFunc("/",

要使用第三方服务对用户进行身份验证,我需要侦听并等待localport,以便通过该服务获取令牌

如何在一个请求后退出go中的服务器


据我所知,只有ListendServer才能永远做到这一点,但只需打开一个请求即可

多亏了@mkopriva,我才能够做到这一点

实际上非常简单,只需手动创建一个服务器对象,然后在handle函数中调用s.Close()

s := &http.Server{
    Addr: "localhost:8085",
}
http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
    //do sth
    s.Close()
})
s.ListenAndServe()
//do sth else

请注意,如果有其他服务器由同一程序运行,并且它们也使用DefaultServeMux,则
“/”
路径可能会出现不必要的冲突。因此,您可能希望改用服务器的处理程序字段。像这样的事情:不要依赖这个。它非常有活力。@Flimzy我目前是单线程的,它应该只在本地主机上监听,但我会保留它mind@Jona:您不是单线程,因为
ListenAndServe
本质上是多线程的(它使用并发,如果您有多个CPU,默认情况下会转换为多线程)。但是只在localhost上监听会有所帮助。我建议,不管localhost与否,都应该等到收到预期的HTTP请求后再关机。如果您同时收到其他请求,请对它们进行排队,并在FIFO的基础上处理它们。这在任何环境下都适用。