华子的代码空间

逆水行舟,不进则退。 关注系统编程、网络编程、并发、分布式。

关于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请求还会立即请求的。

 

posted on 2013-03-07 19:03  华子的代码空间  阅读(5506)  评论(3编辑  收藏  举报

导航