技术最前端,专注 Web 技术学习与总结。JavaScript, JS, ES6, TypeScript, Vue, PHP, CSS3, Html5, Node, Git, Markdown 等技术文章。
Web 应用典型的信息交互过程通常是:客户端通过浏览器发出一个请求,服务端接收请求后进行处理并返回结果给客户端,然后客户端浏览器将信息呈现出来。
这种机制对于信息交互不是特别频繁的应用尚能相安无事,但是对于那些实时要求比较高的应用来说(比如在线游戏),当客户端浏览器准备呈现获取到的信息的时候,这些信息在服务器端可能已经过时,所以,保持客户端和服务器端的信息同步是实时 Web 应用的关键要素。 在 WebSocket 规范出来之前,开发人员想实现这种应用,不得不采用一些折中的方案,其中最常用的就是轮询(Polling)和 Comet(轮询的改进版本,又可细分为长轮询机制与流技术)技术。这几种方案基本都是在用 Ajax 来模拟实时的效果,服务器与客户端编程都比较复杂,而且效率不高。
试想这样一个场景,一个经常访问的网站,每次打开它的页面都要要花费 6 秒;同时另外一个网站提供了相似的服务,但响应时间只需 3 秒,那么你会如何选择呢?数据表明,如果用户打开一个网站,等待 3~4 秒还没有任何反应,他们会变得急躁,焦虑,抱怨,甚至关闭网页并且不再访问,这是非常糟糕的情况。所以,网页加载的速度十分重要,尤其对于拥有遍布全球的 5 亿用户的 Facebook(全球最大的社交服务网站)这样的大型网站,有着大量并发请求、海量数据等客观情况,速度就成了必须攻克的难题之一。
server {
listen 443 ssl;
server_name demo.com www.demo.com;
# 指定证书文件
ssl_certificate /etc/letsencrypt/live/demo.com/fullchain.pem;
# 指定私钥文件
ssl_certificate_key /etc/letsencrypt/live/demo.com/privkey.pem;
include /etc/letsencrypt/options-ssl-nginx.conf;
ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;
}
# 80 端口重定向
server {
listen 80;
server_name demo.com www.demo.com;
rewrite ^(.*) https://$server_name$request_uri? permanent;
}