背景
- 在一些场景下,需要和服务端保持即时通讯,或由服务端主动推送消息。如:
a. 网页在线客服
b. 获取后台任务的进度
c. 协同编辑展示合作者的修改 d. 直播 - HTTP协议是请求/响应模式,client想要实时获取信息,只能通过轮询的方式。这对网络资源和client/server的计算资源都是一种损耗。
- 建立client/server之间的双向通信方式,可以解决此问题。
websocket协议
基于TCP、心跳机制、报文格式
golang-demo
使用第三方库:github.com/gorilla/web…
参考:
www.liuvv.com/p/fae4c74c.…
juejin.cn/post/694695…
企业级怎么做
提供一个“长连接中间件”供业务侧接入,包括开放平台、proxy和SDK。 (大概思路,画的不一定准确;实际实现可能还有很多其他的细节)
graph TD
BizClient --HTTP---> clientSDK
clientSDK --Websocket---> Proxy
Proxy --RPC----> BizServer
BizServer --RPC---> Proxy
Proxy --Websocket---> clientSDK