当前位置: 首页 > news >正文

商城网站都有什么功能模块综合权重查询

商城网站都有什么功能模块,综合权重查询,查询数据的网站怎么做的,青岛网站设计公司电话使用Go开发web服务时很多情况下都会使用号称比标准库快10x的FastHttp, 但fasthttp(版本: 20180529.0.0)至今也没有提供优雅关闭的方法,默认情况下退出服务只能kill。下面谈几个实现方案。 首先,要明确所谓的优雅关闭是要求我们在调用close()时要做到以下…

使用Go开发web服务时很多情况下都会使用号称比标准库快10x的FastHttp, 但fasthttp(版本: 20180529.0.0)至今也没有提供优雅关闭的方法,默认情况下退出服务只能kill。下面谈几个实现方案。

首先,要明确所谓的优雅关闭是要求我们在调用close()时要做到以下几点:

  • 拒绝接受新连接
  • 等待正在处理的请求完成,然后关闭连接
  • 关闭剩余空闲的连接

要做到第一点,我们需要重写一下net.Listener实现,例如叫GraceListener, 在此结构体中组合一个真正干活的Listener,覆盖Close()方法,在此方法中先将干活的Listener关闭,此时就不会再监听新请求了,然后再block当前routine直到所有连接全部关闭为止。代码如下:

type graceListener struct {net.Listener
}func (gl *graceListener) Close() error {err := gl.Close()if nil != err {return err}// block, 直到所有连接关闭
}
fastServ := &fasthttp.Server{Concurrency:  100,Handler:      xxxFunc,LogAllErrors: true,}ln, err := net.Listen("tcp4", ":8080")if nil != err {// err}graceLn := &graceListener{Listener: ln,}fastServ.Serve(graceLn)

接下来看看如何满足后面两条要求。这里有两种方案,第一种最简单的方案是,保存一个全局的sync.WaitGroup指针,在你的请求处理函数中,先调用wg.Add(1), 然后defer wg.Done(), 最后在上面的Close()方法中使用wg.Wait()即可。这里建议最好使用select给等待加个超时功能,即如果超过指定时间还没有退出则强制退出:

// 此方法一直block到所有请求退出或超时
func WaitForGracefullyClose() error {select {case <-waitAllRoutineDone():return nilcase <-time.After(maxWait):return fmt.Errorf("force shutdown after %v", maxWait)}}// 等待所有请求处理routine完成;
// 此方法返回只有1个缓冲的channel, 只有当所有routine结束时channel才会有元素
func waitAllRoutineDone() chan struct{} {flagChan := make(chan struct{}, 1)go func() {wg.Wait()flagChan <- struct{}{}}()return flagChan
}

此外还有第二种方案,那就是在自己的graceListener中添加一个计数器用于统计当前的连接数,重写Accept()方法,将计数器+1,再定义一个自己的套壳net.Conn实现,重写Close()方法,在里面将计数器-1。这里要注意线程安全问题,最好使用atomic包进行操作。最后在graceListener#Close()中关闭Listener后等待计数器归零。这种方案有以下几个缺点:

  • 实现繁琐
  • 无法处理keep-alive连接。即请求已经处理完成,但是连接并没有关闭,这时计数器不会归零。不过可以使用go 1.3新增加的 Conn State Hook来实现当连接状态变更时的通知,但是也是比较繁琐的。

因此不推荐这种方案。

完成Http Server的关闭后,就可以添加一些清理自己业务资源的逻辑了,比如关闭数据库连接,redis连接,取消注册,刷新日志等。

http://www.hrbkazy.com/news/5139.html

相关文章:

  • 野花影视大全在线西瓜seo外包公司如何优化
  • 湖南长沙公司seo技术最新黑帽
  • 郑州网站建设 天强科技图片识别
  • 怎么做网站发货千锋教育培训多少钱
  • 北医三院生殖科做试管的网站电商网站制作
  • apache添加网站北京疫情最新情况
  • 光谷 网站建设公司seo博客网址
  • wordpress完美搬家快速提高网站关键词排名优化
  • 西安 网站建设 培训班云南网站seo服务
  • 网站建设客服术语网店推广平台有哪些
  • 如何用公众号做网站一站式自媒体服务平台
  • 做logo用什么网站重庆seo研究中心
  • 常德外贸网站优化推广网站seo优化
  • 广州定制网站开发网络营销推广方式包括
  • 动态网页是什么seo免费软件
  • b2c网站结构分析优化网站的方法有哪些
  • 唐山高端网站建设seo快速排名软件网址
  • 长沙做网站企业株洲seo
  • 深圳宝安区做网站培训学校加盟
  • 帝国网站管理系统安装关键词优化的最佳方法
  • 甘肃住房城乡建设厅网站首页山东seo费用多少
  • 个人网站是怎么样的线上营销渠道有哪些
  • 百度上搜不到做的网站惠州百度seo在哪
  • 农家院做宣传应该在哪个网站常熟seo关键词优化公司
  • python如何安装wordpresswindows优化大师自动下载
  • 网站刷链接怎么做小程序模板
  • 做什么网站比较受欢迎杭州明开seo
  • 做钓鱼网站违法吗郑州网站建设专业乐云seo
  • logo设计软件手机版系统优化软件推荐
  • 哪个品牌网站设计感强优化设计官网