关于HTTP长连接的保持和断开
最近在折腾一个长连接HTTP服务器的时候,积累了一些经验,下面总结出来:
1. 最好使用支持HTTP/1.1的服务器,HTTP/1.1默认支持keep-alive,不需要像HTTP/1.0那样检测Connection: keep-alive.
2. 浏览器的刷新也会断开长连接,如果在服务端有一些判断,要注意发生重复的可能。
3. 在用户关闭浏览器的标签的时候,如果有多个页面和服务器保持长连接,服务器应检测对应的页面,并做清理。
4. 将长连接服务器位于反向代理之后,应在反向代理服务器上设置保持keep-alive,如nginx。
这样可显著减少后端upstream服务器的压力。
5. 检测用户刷新页面,如果刷新应询问用户是否真的刷新。这样可以减少一些误判断。
如WEBQQ在检测到用户刷新时,对应的动作是重新登录。
这样做是很好,可以预防用户在当前页面重复触发一些业务逻辑。
6. 如因为业务需要将长连接和会话绑定(很多WEB IM都这样做),应注意清理服务端保持的长连接。
发送完消息,就应该删除这个长连接。因为浏览器ajax请求还会立即请求的。