看透 Spring MVC 源代码分析与实践 —— 网站基础知识

news/2024/5/21 0:14:52/文章来源:https://blog.csdn.net/X5fnncxzq4/article/details/79419865

网站架构及其演变过程

友情提示:欢迎关注公众号【芋道源码】。?关注后,拉你进【源码圈】微信群讨论技术和源码。

友情提示:欢迎关注公众号【芋道源码】。?关注后,拉你进【源码圈】微信群讨论技术和源码。

友情提示:欢迎关注公众号【芋道源码】。?关注后,拉你进【源码圈】微信群讨论技术和源码。


基础结构

网络传输分解方式:

  • 标准的 OSI 参考模型

  • TCP/IP 参考模型

海量数据的解决方案

  • 缓存和页面静态化

  • 缓存

    • 通过程序直接保存在内存中

    • 使用缓存框架 (Encache、Redis、Memcache)

  • 页面静态化

    • 使用模板技术生成(Velocity、FreeMaker等)

  • 数据库优化

  • 表结构优化

  • SQL 语句优化

  • 分区

  • 分表

  • 索引优化

  • 使用存储过程代替直接操作过程

  • 分离活跃数据

  • 批量读取和延迟修改

  • 读写分离

  • 分布式数据库

  • NoSQL 和 Hadoop

高并发的解决方案

  • 应用和静态资源的分离:静态文件(图片、视频、JS、CSS等)放在专门的服务器上

  • 页面缓存(Nginx 服务器、Squid 服务器)

  • 集群与分布式

  • 反向代理

  • CDN

  • 底层优化:网络传输协议

常见协议和标准

TCP/IP 协议

IP:查找地址,对应着国际互联网

TCP:规范传输规则,对应着传输层

TCP 在传输之前会进行三次沟通,称 “三次握手”,传完数据断开的时候要进行四次沟通,称 “四次挥手”。

TCP 两个序号,三个标志位含义:

  • seq:表示所传数据的序号。TCP 传输时每一个字节都有一个序号,发送数据的时候会将数据的第一个序号发送给对方,接收方会按序号检查是否接收完整了,如果没接收完整就需要重新传送,这样就可以保证数据的完整性。

  • ack:表示确认号。接收端用它来给发送端反馈已经成功接收到的数据信息,它的值为希望接收的下一个数据包起始序号。

  • ACK:确认位,只有 ACK = 1 的时候 ack 才起作用。正常通信时 ACK 为 1,第一次发起请求时因为没有需要确认接收的数据所以 ACK 为 0。

  • SYN:同步位,用于在建立连接时同步序号。刚开始建立连接时并没有历史接收的数据,所以 ack 也就没有办法设置,这是按照正常的机制就无法运行了,SYN 的作用就是解决这个问题的,当接收端接收到 SYN = 1 的报文时就会直接将 ack 设置为接收到的 seq + 1 的值,注意这里的值并不是检验后设置的,而是根据 SYN 直接设置的,这样正常的机制就可以运行了,所以 SYN 叫同步位。SYN 会在前两次握手时都为 1,这是因为通信的双方的 ack 都需要设置一个初始值。

  • FIN:终止位,用来在数据传输完毕后释放连接。

DNS 的设置

DNS 解析

参考域名设置,如下是我在腾讯云域名的设置

记录类型:

A记录: 将域名指向一个IPv4地址(例如:8.8.8.8)

CNAME:将域名指向另一个域名(例如 www.54tianzhisheng.cn)

MX: 将域名指向邮件服务器地址

TXT: 可任意填写,长度限制255,通常做SPF记录(反垃圾邮件)

NS: 域名服务器记录,将子域名指定其他DNS服务器解析

AAAA:将域名指向一个iPv6地址(例如:ff06:0:0:0:0:0:0:c3)

SRV:记录提供特定服务的服务器(例如xmpp-server.tcp)

显性URL:将域名301重定向到另一个地址

隐性URL:类似显性URL,但是会隐藏真实目标地址

主机记录:

要解析 www.54tianzhisheng.cn,请填写 www。主机记录就是域名前缀,常见用法有:

www: *解析后的域名为 www.54tianzhisheng.cn。

*@: 直接解析主域名 54tianzhisheng.cn。

*: 泛解析,匹配其他所有域名 *.54tianzhisheng.cn。

mail: 将域名解析为 mail.54tianzhisheng.cn,通常用于解析邮箱服务器。

二级域名: 如:abc.54tianzhisheng.cn,填写abc。

手机网站: 如:m.54tianzhisheng.cn,填写m。

Java 中 Socket 的用法

普通 Soket 的用法

Socket 分为 ServerSocket 和 Socket 两大类。

ServerSocket 用于服务器端,可以通过 accept 方法监听请求,监听到请求后返回 Socket;

Socket 用户具体完成数据传输,客户端直接使用 Socket 发送请求并传输数据。

随便写了个单方面发送消息的 demo:

客户端:

  1. import java.io.IOException;

  2. import java.io.OutputStream;

  3. import java.net.Socket;

  4. /**

  5. * Created by 10412 on 2017/5/2.

  6. * TCP客户端:

  7. ①:建立tcp的socket服务,最好明确具体的地址和端口。这个对象在创建时,就已经可以对指定ip和端口进行连接(三次握手)。

  8. ②:如果连接成功,就意味着通道建立了,socket流就已经产生了。只要获取到socket流中的读取流和写入流即可,只要通过getInputStream和getOutputStream就可以获取两个流对象。

  9. ③:关闭资源。

  10. */

  11. //单方面的输入!

  12. public class TcpClient

  13. {

  14.    public static void main(String[] args) {

  15.        try {

  16.            Socket s = new Socket("127.0.0.1", 9999);

  17.            OutputStream o = s.getOutputStream();

  18.            o.write("tcp sssss".getBytes());

  19.            s.close();

  20.        } catch (IOException e) {

  21.            e.printStackTrace();

  22.        }

  23.    }

  24. }

服务器端:

  1. import java.io.IOException;

  2. import java.io.InputStream;

  3. import java.net.ServerSocket;

  4. import java.net.Socket;

  5. /**

  6. * Created by 10412 on 2017/5/2.

  7. */

  8. public class TcpServer

  9. {

  10.    public static void main(String[] args) {

  11.        try {

  12.            ServerSocket ss = new ServerSocket(9999);//建立服务端的socket服务

  13.            Socket s = ss.accept();//获取客户端对象

  14.            String ip = s.getInetAddress().getHostAddress();

  15.            int port = s.getPort();

  16.            System.out.println(ip + " : " + port + " connected");

  17.            // 可以通过获取到的socket对象中的socket流和具体的客户端进行通讯。

  18.            InputStream ins = s.getInputStream();//读取客户端的数据,使用客户端对象的socket读取流

  19.            byte[] bytes = new byte[1024];

  20.            int len = ins.read(bytes);

  21.            String text = new String(bytes, 0, len);

  22.            System.out.println(text);

  23.            //关闭资源

  24.            s.close();

  25.            ss.close();

  26.        } catch (IOException e) {

  27.            e.printStackTrace();

  28.        }

  29.    }

  30. }

NioSocket 的用法

见以前的一篇文章:Java NIO 系列教程: http://www.54tianzhisheng.cn/2017/03/28/Java%20NIO%20%E7%B3%BB%E5%88%97%E6%95%99%E7%A8%8B/

书中第五章简单的讲了下实现 HTTP 协议。第六章主要讲 Servlet,写了 Servlet 接口和其实现类。第七章把 Tomcat 分析的很不错,如果有读者感兴趣的话,可以去看看。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.luyixian.cn/news_show_827976.aspx

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

某政府网站信息文章标题、链接、刊布时间等信息获取

目录一、需求信息二、过程感触三、实战code一、需求信息 需要信息: 每个内容下开篇的索引号、发布机构、组配分类、标题、发布时间和链接地址,部分实例如下图: 上图中左侧的目录结构对应的刊布信息中的如下信息: 题外话&#x…

大型分布式网站术语分析 15 条,你知道几条?

点击上方“芋道源码”,选择“置顶公众号”技术文章第一时间送达!源码精品专栏 精尽 Dubbo 原理与源码专栏( 已经完成 69 篇,预计总共 75 篇 )中文详细注释的开源项目Java 并发源码合集RocketMQ 源码合集Sharding-JDBC 源码解析合集Spring MVC…

几个大型网站的Feeds(Timeline)设计简单对比

点击上方“芋道源码”,选择“置顶公众号”技术文章第一时间送达!源码精品专栏 精尽 Dubbo 原理与源码专栏( 已经完成 69 篇,预计总共 75 篇 )中文详细注释的开源项目Java 并发源码合集RocketMQ 源码合集Sharding-JDBC 源码解析合集Spring MVC…

基于LAMP环境发布一个Discuz论坛网站

一、LAMP是什么 1、LAMP是常见的Web服务器环境解决方案,用于创建和管理Web应用程序的开源开发平台。Linux用作后端操作系统,Apache是​​Web服务器,MySQL是数据库,PHP是脚本语言。 2、LAMP 为 Linux、Apache、MySQL、PHP 的简称…

尾随《大型网站技术架构》作者,从零单排「大数据」

李智慧大佬,《大型网站技术架构》(艿艿的架构启蒙读物)的作者,豆瓣评分 7.9 分,出了「大数据」专栏。所以,如果你数据量挺大的,可以扫码买一买。如果你数据量不大,但是想膨胀膨胀&am…

大型网站架构演进的五大阶段盘点

点击上方“芋道源码”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏 精尽 Dubbo 原理与源码 69 篇精尽 Netty 原理与源码 61 篇中文详细注释的开源项目Java 并发源码合集RocketMQ 源码合集Sharding-JDBC 源码解析合集Spring MVC …

初步了解网站压力测试工具

http://www.51testing.com/html/index.html(51测试网) 一、ab网站压力测试 ab是apache自带的压力测试工具,ab是apachebench命令缩写。它不仅可以对apache服务器进行网站访问压力测试,也可以对或其它类型的服务器进行压力测试。比如nginx、tomcat、IIS等。…

用户在电商网站中购买成功了,那么 TA 在微服务中经历了什么?

点击上方“芋道源码”,选择“设为星标”做积极的人,而不是积极废人!源码精品专栏 原创 | Java 2019 超神之路,很肝~中文详细注释的开源项目RPC 框架 Dubbo 源码解析网络应用框架 Netty 源码解析消息中间件 RocketMQ 源码解析数据库…

Python采集网站随机header

不废话直接代码: import randomclass UserAgent:def __init__(self):self.headers ["Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/39.0.2171.95 Safari/537.36","Mozilla/5.0 (Macintosh; Intel Mac OS X…

分享Html模板5合一模板---50电影模板、56个游、86个体育项目、95个音乐网站、116个时尚

模板下载链接:https://pan.baidu.com/s/1zNvc5K8tpWbxAKuIziGgjg 密码:agk4 50电影模板Html模板! 56个游戏Html模板 86个体育项目Html模板 95个音乐网站Html模板 116个时尚Html模板 我就不相信没有你需要的! 50电影模板Html模板! 儿童…

《大型网站系统与Java中间件》读书笔记(上)

前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:github.com/ZhongFuChen… (想自学习编程的小伙伴请搜索圈T社区,更多行业相关资讯更有行业相关免费视频教程。完全免费哦!) 一、为什么分布式&#xff…

《大型网站系统与Java中间件》读书笔记 (中)

前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:github.com/ZhongFuChen… 回顾上一篇: 《大型网站系统与Java中间件》读书笔记(一) 这周周末读了第四章,现在过来做做笔记,希望…

利用node.js写爬虫 爬取某相亲网站全部交友信息

点击查看爬取世纪佳缘相亲交友信息 利用node.js,写了一个爬虫js。1个小时左右的时间,便爬取了2000多条交友信息,包括网名,年龄,图片,学历,工资等。当然,爬取的速度和网速有很大的关…

分享21个广告排行、15个交友会员、25个网站导航和39个文件管理PHP源码,总有一款适合你

链接:https://pan.baidu.com/s/1aMHf6wDNbHm-2upU287w2A 提取码:px8q 分享21个广告排行、15个交友会员、25个网站导航和39个文件管理PHP源码,总有一款适合你 下面是文件的名字,我放了一些图片,文章里不是所有的图主要…

支付宝记---电脑网站支付(.NET)

根据商品信息和价格生成支付宝支付的二维码 2019年夏,张渔歌仄伏于家中。越明年,疫情依旧,渔歌隧研究支付宝支付。其中心酸不言表,属予作文以记之。 一、准备工作 1、支付宝开发平台https://open.alipay.com/。需要进行企业级的…

Web Monitor/Dev/Test Tool Collection 网站/网页监控/开发/测试工具集合

HttpWatch HttpWatch是强大的网页数据分析工具. 包括网页摘要.Cookies管理.缓存管理.消息头发送/接受.字符查询.POST 数据和目录管理功能.报告输出. Features: Easily monitor HTTPS, HTTP and SPDY without using proxies or changing network settingsSupports IE/Firefox on…

Java 爬虫遇到需要登录的网站,该怎么办?

这是 Java 网络爬虫系列博文的第二篇,在上一篇 Java 网络爬虫,就是这么的简单 中,我们简单的学习了一下如何利用 Java 进行网络爬虫。在这一篇中我们将简单的聊一聊在网络爬虫时,遇到需要登录的网站,我们该怎么办&…

【Python】Flask+Gunicorn搭建简单网站

1.安装Flask第三方库 pip3 install Flask 2.创建Flask应用程序 项目结构如上图所示,其中static用来放置静态文件,如js文件、css文件以及图片等,templates文件夹用来放置模板文件,即html文件。 在项目中导入Flask第三方库&#…

【大型网站技术实践】初级篇:借助Nginx搭建反向代理服务器

一、反向代理:Web服务器的“经纪人” 1.1 反向代理初印象 反向代理(Reverse Proxy)方式是指以代理服务器来接受internet上的连接请求,然后将请求转发给内部网络上的服务器,并将从服务器上得到的结果返回给internet上请…

css3和html5网站模板

过去的几年,网页设计和制作人员就已开始关注和使用 HTML5 了,如今 HTML5 得到了更加广泛的应用,国外已有很多基于 HTML5 制作的网站。所以,今天这篇文章给大家带来的是35款基于 HTML5 和 CSS3 的非常精致的网站模板,大…