阅读 356

webIM系列之一——浏览器输入URL回车后到底发生了什么

写一个webIM的系列文章,介绍一下自己在开发webIM相关产品时的一些学习经验和教训,以前总觉得互联网上每一个技术点,大概都已经有人写过了,所以就没有必要再写了,但是通过几年的爬坑经验,发现不是所有人写的东西都是正确的,也不是所有的资料都可以解决自己遇到的问题,而且不自己写一写,有些知识真的可能只是看起来自己已经会了,实际还没有真正理解通透,所以就写一写吧,看自己能坚持多久,也为自己一直以来想要写书的愿望做个尝试吧。

webIM就是浏览器端的即时通信系统,大家可能对微信、QQ、钉钉这些APP比较熟悉,其实webIM跟这些APP产品很类似,只不过浏览器就是客户端,需要针对浏览器做一些特殊处理,每个电商的网站,也都会有在线客服,这也是webIM应用最广泛的场景。

webIM产品的市场非常广阔,所涉及到的知识点也非常广,对整个IT技术体系的理解和要求都挺高,有一个面试题其实挺能反应这个技术领域所涉及到的技术范围,这个问题就是:浏览器中输入网址并回车后,到底发生了什么?

说说所理解并且真实体验过的整个过程。

首先,需要先有一个域名,这需要去域名提供商申请购买,每个域名的价格都不太一样,京东的jd.com域名价值3000万,小米的域名mi.com价值2200万,唯品会的域名vip.com价值1200万,我曾经的域名henry14.cn,价值1年29元;

第二,需要有一个服务器,来部署应用程序;

第三,在国内,网站上线,需要备案域名,不能搞黄赌毒,监管要审查;

第四,现在的互联网网站,基本都已经全站HTTPS了,所有还需要申请一个证书,证书的安全等级、可信度也不一样,每个证书是否支持多级域名,多域名,跟价格也有关系,可以到freessl.cn; 

第五,部署应用需要购买云服务器,前后端分离需要安装Nginx和Tomcat,将证书配置在Nginx服务器上,并配置Nginx反向代理Tomcat和负载均衡;

第六,浏览器输入的是域名,而真正提供服务的,是服务器,这个服务器在互联网上的地址,是以IP和端口来确定的,那如何通过域名找到服务器呢,这就是DNS(Domain Name System)系统的工作了。

第七,网站部署好之后,用户就可以根据域名来访问网站了,如果网站用户遍布世界各地,用户距离服务器太远,访问可能会出现延迟等待,这时候或许还需要使用CDN(Content Delivery Network),用以加速网站访问。Google网站访问速度每慢400 ms就将导致用户搜索请求下降 0.59%;Amazon表示,增加 100ms的网站延迟将导致其收入下降 1%,;雅虎网站如果有400ms 延迟会导致流量下降 5-9%。

第八,用户的浏览器要访问网站内容,需要与服务器建立TCP连接,TCP连接在OSGI 7层网络模型中处于第四层传输层,建立连接的过程,是大家耳熟能详的三次握手的过程; 

第九,TCP连接完成之后,HTTPS协议还要进行一些列的交换密钥、加密等等复杂过程

第十,webIM需要实现实时的通信,就要建立高效的信息交换通道,这可以使用websocket或者long polling 的协议或方式,websocket协议是在http协议之上的,受TCP协议socket的启发而形成的浏览器端全双工通信协议

以上大致介绍了一个webIM网站建设会涉及到的一些阶段。最主要的工作,还是在应用程序的开发上。真的要感谢这个时代,让我们可以站在巨人的肩膀上,看的更高更远,也同样感谢这个开源的时代,让我们可以借助开源的力量,实现自己的架构方案。这个系列最主要的内容,会集中在应用程序开发所使用到的各种框架的实现原理、源码阅读上,我在开发webIM应用过程中使用到的主要框架和技术包括:socket.io、netty-socketio、netty、Redis、Redisson、mybatis、mybatis-plus、spring-security、MySQL、Nginx、Tomcat、JDK源码、disruptor、spring-cache、NIO、spring-session、spring-data-redis、springboot、Druid、Vue、webpack、electron、ElementUI、sharding-jdbc、xxl-job、logback、Git等等。

这个系列主要以介绍技术框架、阅读源码的形式来展开,希望通过这个系列,能够梳理一下自己的知识体系,查漏补缺,也希望通过我的文字,可以让读者也有所收获。

文章分类
后端
文章标签