이 기사는 웹사이트 아키텍처와 Spring MVC 코드 실습의 진화를 공유합니다. 내용이 꽤 좋습니다. 도움이 필요한 친구들에게 도움이 되기를 바랍니다
웹사이트 아키텍처와 그 진화 과정
분해 방법:
표준 OSI 참조 모델
TCP/IP 참조 모델
캐싱 및 페이지 정적화
Caching
프로그램을 통해 메모리에 직접 저장
캐시 프레임워크(Encache, Redis, Memcache) 사용
정적 페이지
템플릿 기술(Velocity, FreeMaker 등)을 사용하여 생성됨
데이터베이스 최적화
테이블 구조 최적화
SQL 문 최적화
Partition
하위 테이블
인덱스 최적화
직접 조작 절차 대신 저장 프로시저를 사용하세요
별도의 활성 데이터
일괄 읽기 및 지연 수정
독서의 분리 그리고
분산 데이터베이스
NoSQL 및 Hadoop
을 작성합니다.
분리 애플리케이션 및 정적 리소스: 정적 파일(이미지, 비디오, JS, CSS 등)은 전용 서버
페이지 캐시(Nginx 서버, Squid 서버)
클러스터링 및 분산
역방향 프록시
CDN
기본 최적화: 네트워크 전송 프로토콜
IP: 국제 인터넷에 해당하는 조회 주소
TCP: 전송 계층에 해당하는 표준 전송 규칙
TCP는 전송 전에 3번 통신하는데, 이를 "3방향 핸드셰이크"라고 합니다. 데이터를 전송한 후 연결이 끊어지면 4번 통신합니다. 이를 "4파"라고 합니다.
TCP 두 개의 시퀀스 번호, 세 개의 플래그 의미:
seq: 전송된 데이터의 시퀀스 번호를 나타냅니다. TCP 전송 중 각 바이트에는 시퀀스 번호가 있습니다. 데이터 전송 시 수신자는 시퀀스 번호에 따라 수신 완료 여부를 확인합니다. , 재전송이 필요합니다. 이렇게 하면 데이터 무결성이 보장될 수 있습니다.
ack: 확인 번호를 나타냅니다. 수신측에서는 이를 사용하여 성공적으로 수신된 데이터 정보를 송신측에 피드백합니다. 그 값은 수신하려는 다음 데이터 패킷의 시작 시퀀스 번호입니다.
ACK: 승인 비트, ack는 ACK = 1인 경우에만 작동합니다. 정상적인 통신 중에는 ACK가 1이 됩니다. 처음 요청이 시작되면 확인해야 할 데이터가 없기 때문에 ACK가 0이 됩니다.
SYN: 연결을 설정할 때 시퀀스 번호를 동기화하는 데 사용되는 동기화 비트입니다. 처음 연결이 설정되면 수신된 데이터에 대한 기록이 없으므로 ack를 설정할 방법이 없습니다. 이는 일반적인 메커니즘에 따라 작동하지 않습니다. SYN의 역할은 수신 측에서 이 문제를 해결하는 것입니다. SYN = 1 보고 쓰기 시 ack는 수신된 seq + 1의 값으로 직접 설정됩니다. 여기서 값은 검증 후에 설정되는 것이 아니라 SYN에 따라 직접 설정되므로 정상적인 메커니즘이 실행될 수 있습니다. 그래서 SYN을 동기화 비트라고 합니다. SYN은 처음 두 번의 핸드셰이크에서 1이 됩니다. 통신에서 양 당사자의 응답이 초기 값을 설정해야 하기 때문입니다.
FIN: 종료 비트, 데이터 전송이 완료된 후 연결을 해제하는 데 사용됩니다. Dns 설정 nDns 분석
레코드 유형:
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으로 확인합니다.
2차 도메인 이름: 예: abc.54tianzhisheng.cn, abc를 입력하세요.
모바일 웹사이트: 예: m.54tianzhisheng.cn, m을 입력하세요.
Socket은 ServerSocket과 Socket의 두 가지 범주로 나뉩니다.
ServerSocket은 서버측에서 accept 메서드를 통해 요청을 수신할 수 있으며 요청을 수신한 후 Socket을 반환합니다.
Socket 사용자는 구체적으로 데이터 전송을 완료하고 클라이언트는 직접 Socket을 사용하여 요청을 보내고 전송합니다. 데이터.
방금 일방적으로 메시지를 보내는 데모를 작성했습니다:
클라이언트:
<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">io</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">IOException</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>
<span style=" 색상:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">가져오기<code style="margin-left:-20px;line-height:12px;border-width:0px;font-size:10px;font-family:inherit !important;"><span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">io</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">OutputStream</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>
<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">net</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">Socket</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>
<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;">/**</span>
<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> * Created by 10412 on 2017/5/2.</span>
<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> * TCP客户端:</span>
<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ①:建立tcp的socket服务,最好明确具体的地址和端口。这个对象在创建时,就已经可以对指定ip和端口进行连接(三次握手)。</span>
java.io
<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import🎜<span style="color: rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java🎜<span style="color:rgb(204,204,204);line-height:20px;font- 크기:13px !important;white-space: !important;">.🎜<span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important; ">net🎜<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.🎜<span style="color:rgb( 126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">소켓🎜<span style="color:rgb(204,204,204);line-height:20px;font-size: 13px !important;white-space: !important;">;🎜</span></span></span></span></span></span></span>
🎜🎜🎜🎜🎜🎜🎜🎜
🎜🎜🎜🎜🎜🎜🎜🎜<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: ! 중요;">/**🎜</span>
🎜🎜🎜🎜🎜🎜🎜🎜<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> * 10412에 의해 작성됨 2017/5/2.🎜</span>
🎜🎜🎜🎜🎜🎜🎜🎜<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> * TCP客户端:🎜 </span>
🎜🎜🎜🎜🎜🎜🎜🎜<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ①:建立tcp 소켓이 服务 , 最好明确具体的地址 와 端口.这个对象는 创建时,就已经可以对指定ip 와端 进行连接(三次握手)。🎜</span>
🎜🎜🎜
<span style=" color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ②: 연결이 성공하면 채널이 설정되고 소켓 스트림이 있음을 의미합니다. 생성되었습니다. 소켓 스트림에서 읽기 스트림과 쓰기 스트림을 가져오고 getInputStream 및 getOutputStream을 통해 두 개의 스트림 개체를 가져옵니다. <code style="margin-left:-20px;line-height:12px;border-width:0px;font-size:10px;font-family:inherit !important;"><span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ②:如果连接成功,就意味着通道建立了,socket流就已经产生了。只要获取到socket流中的读取流和写入流即可,只要通过getInputStream和getOutputStream就可以获取两个流对象。</span>
<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ③:关闭资源。</span>
*/ //单方面的输入! public class TcpClient { public static void main(String[] args) { try { Socket s = new Socket("127.0.0.1", 9999); OutputStream o = s.getOutputStream(); o.write("tcp sssss".getBytes()); s.close(); } catch (IOException e) { e.printStackTrace(); } } }
服务器端:
<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">io</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">IOException</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>
<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">io</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">InputStream</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>
<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">net</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">ServerSocket</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>
<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ③: 리소스를 닫습니다. 🎜</span>
🎜🎜🎜🎜🎜/** * Created by 10412 on 2017/5/2. */ public class TcpServer { public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(9999);//建立服务端的socket服务 Socket s = ss.accept();//获取客户端对象 String ip = s.getInetAddress().getHostAddress(); int port = s.getPort(); System.out.println(ip + " : " + port + " connected"); // 可以通过获取到的socket对象中的socket流和具体的客户端进行通讯。 InputStream ins = s.getInputStream();//读取客户端的数据,使用客户端对象的socket读取流 byte[] bytes = new byte[1024]; int len = ins.read(bytes); String text = new String(bytes, 0, len); System.out.println(text); //关闭资源 s.close(); ss.close(); } catch (IOException e) { e.printStackTrace(); } } }🎜
서버 끝 : 🎜
<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import🎜<span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java🎜<span style=" color :rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.🎜<span style="color:rgb(238,255,255);line-height:20px; 글꼴 -size:13px !important;white-space: !important;">io🎜<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: 중요 ;">.🎜<span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">IOException🎜<span style="color: rgb (204,204,204);줄 높이:20px;글꼴 크기:13px !important;white-space: !important;">;🎜</span></span></span></span></span></span></span>
🎜🎜🎜🎜🎜🎜🎜🎜<span style="color:rgb(199,146,234);line-height:20px; 글꼴 -size:13px !important;white-space: !important;">import🎜<span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: 중요 ;">java🎜<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.🎜<span style="color: rgb (238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">io🎜<span style="color:rgb(204,204,204);line-height:20px;font- 크기 :13px !important;white-space: !important;">.🎜<span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important; >InputStream🎜<span style=" color:rgb>;🎜</span></span></span></span></span></span>
🎜🎜🎜🎜🎜 🎜 🎜🎜<span style="color: rgb (199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">가져오기🎜<span style="color:rgb(238,255,255);line-height:20px;font- 크기 :13px !important;white-space: !important;">java🎜<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important; >.🎜<span style=" color:rgb>net🎜<span style="color:rgb( 204,204,204 );line-height:20px;font-size:13px !important;white-space: !important;">.🎜<span style="color:rgb(126,165,247);line-height:20px;font-size: 13px !important;white-space: !important;">ServerSocket🎜<span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;"> ; 🎜</span></span></span></span></span></span>
🎜🎜🎜<span style="color:rgb(199,146,234);line-height:20px;font-size:13px !important;white-space: !important;">import</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;">net</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">.</span><span style="color:rgb(126,165,247);line-height:20px;font-size:13px !important;white-space: !important;">Socket</span><span style="color:rgb(204,204,204);line-height:20px;font-size:13px !important;white-space: !important;">;</span>
/** * Created by 10412 on 2017/5/2. */ public class TcpServer { public static void main(String[] args) { try { ServerSocket ss = new ServerSocket(9999);//建立服务端的socket服务 Socket s = ss.accept();//获取客户端对象 String ip = s.getInetAddress().getHostAddress(); int port = s.getPort(); System.out.println(ip + " : " + port + " connected"); // 可以通过获取到的socket对象中的socket流和具体的客户端进行通讯。 InputStream ins = s.getInputStream();//读取客户端的数据,使用客户端对象的socket读取流 byte[] bytes = new byte[1024]; int len = ins.read(bytes); String text = new String(bytes, 0, len); System.out.println(text); //关闭资源 s.close(); ss.close(); } catch (IOException e) { e.printStackTrace(); } } }
위 내용은 웹사이트 아키텍처와 Spring MVC 코드 실습의 진화의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!