【发布时间】:2017-11-19 16:52:53
【问题描述】:
当我查看 net/http 服务器界面时,我看不到在 http.Server 启动并开始侦听时获得通知和做出反应的明显方式:
ListenAndServe(":8080", nil)
在服务器真正关闭之前,该函数不会返回。我还查看了服务器类型,但似乎没有任何东西可以让我利用那个时间。某些功能或频道会很棒,但我没有看到。
有什么方法可以让我检测到该事件,还是让我睡“足够”来伪造它?
【问题讨论】:
-
你是指
log之类的东西吗? -
你想知道监听器是什么时候创建的吗?你想解决什么问题?如果您愿意,可以使用
Server.Serve将侦听器直接传递给服务器。 -
我希望能够采取某些操作,例如“此 http 服务器已开放营业”。例如,可以想象这样一种场景,您希望将此服务器注册到注册表,以便一旦服务器启动并实际接受连接,它就会成为某些服务发现的一部分。然后客户端可以发现这个实例并开始发送流量。我怀疑监听器的创建是一个答案,因为它只是创建监听器实例,但实际上并没有接受连接,对吧?
-
@sjlee:好吧,一旦创建了监听器,操作系统就会接受连接到同步队列中,所以它们不会被拒绝。服务发现通常依赖于其他系统,例如运行状况/端口检查,因此在服务出现时注册它不是问题。
-
好吧,这很公平。感谢那。一般来说,我仍然很感兴趣,没有可以提供在服务器启动时通知的通道或函数。我觉得它是一个非常有用的功能。
标签: go