现在看到官方的作法是每隔一分钟用ajax刷新一下/home/ajax/notifications/这页面,有新通知就更新页面,没有新通知就睡眠一分钟后再次刷新,这个时间间隔影响了时效性,而且在线人数很多的话,没人每分钟刷新一次对服务器承载也是挺大的,所以建议采用以下方案:
[]客户端:同样是采用ajax的get像服务器发送,发送请求后到取得服务器的返回数据这个过程是需要一个等待过程的,这个时间段客户端什么都不用做,一旦服务器返回了数据或延时过长没有得到服务器返回的数据,立即进入下一次get。[/]
2.服务器端:在接受到客户端的get请求后立即检查是否有新通知,如果有新通知立即反馈“有新通知”数据给客户端,如果没有新通知则不立即返回“无新通知” 数据给客户端,而是睡眠几秒(这个秒数的设定决定了信息实时性的间隔段),睡眠结束后继续检查是否有新通知,如果有新通知立即反馈“有新通知”数据给客户端,如果没有新通知则不立即返回“无新通知” 数据给客户端,而是睡眠几秒......就这样一直持续到请求超时过期,超时过期后客户端会立即发起一次新的请求,所以这个请求超时的时间设定就基本上决定客户端每多长时间刷新一下服务器。
通过这种方案,如果服务器端设置的那个睡眠时间为3秒,则客户得到新通知的实时性从原来的1分钟缩短到3秒。如果服务器端设置的请求超时的时间为3分钟,则服务器的压力由原来的每1分钟每客户端刷新一次降低到了每3分钟每客户端刷新一次。
阅读全文
收起全文