Go语言中文网,致力于每日分享编码知识,欢迎关注我,会有意想不到的收获!
![8e4257f388d32e2493a0a5fcba93646d.png](https://i-blog.csdnimg.cn/blog_migrate/00a00c67e705b64597e28c129d0314ac.jpeg)
1 场景介绍
web应用中,常有业务状态需要实时更新的场景。如一个较长的后台任务,从浏览器用户触发执行到执行完成可能需几十秒的时间,这时前端需隔几秒请求一次后台,查询任务执行进度。此种方式是长轮询的方式,是存在一定弊端的,增加了后台服务的负载,若并发操作量太大,后台压力会成倍激增。业界常采用http1.1的websocket扩展协议与浏览器建立长连接来实现实时业务状态更新。
2 实现方案
本文采用golang实现一个长连接服务,对外提供两个接口,一个是基于http的rest消息发送接口,一个是基于websocket的client接入接口,如下图所示。
![30ed10e9f4b315ef36ef046b71cea970.png](https://i-blog.csdnimg.cn/blog_migrate/7557bb94c77979f3be55698160556f87.jpeg)
为使前端的接入更简单,从建立连接到用户关闭浏览器,中间前端无须发送消息来告知服务器client是否下线。我们将检测放在后台,