Server.close
停止接收新连接,正在执行的处理函数继续执行完(优雅关闭)。
close()示例
在随机端口启动Http服务,观察处理中的请求数,再优雅关闭。
javascript
function main() {
// 端口写 0 表示随机分配空闲端口,实际地址用 addr() 获取
var server = threading.Serve("http://127.0.0.1:0", function (ctx) {
Sleep(1000)
ctx.write("done")
})
Log("listen on", server.addr())
// 输出:listen on 127.0.0.1:<随机端口>
// 在另一个线程里发起请求,主线程观察服务状态
threading.Thread(function (addr) {
Log("response:", HttpQuery("http://" + addr + "/"))
// 输出:response: done(约1秒后)
}, server.addr())
Sleep(200)
Log("pending:", server.pending())
// 输出:pending: 1(有一个请求正在处理)
server.close() // 不再接收新连接,正在处理的请求继续执行
Log("idle:", server.join(5000))
// 输出:idle: true(服务已关闭且请求都处理完了)
}参考
备注
重复调用没有影响。需要等待正在执行的处理函数结束时,接着调用join()。