Heim > Artikel > Backend-Entwicklung > Website-Architektur und Entwicklung der Spring MVC-Codepraxis
Dieser Artikel teilt Ihnen die Website-Architektur und die Entwicklung der Spring MVC-Code-Praxis mit. Der Inhalt ist ziemlich gut. Ich hoffe, er kann Freunden in Not helfen.
Website-Architektur und seine Entwicklung
Methode zur Zerlegung der Netzwerkübertragung:
Standard-OSI-Referenzmodell
TCP/IP-Referenzmodell
Caching und Seitenstatisierung
Cache
Direkt im Speicher über das Programm speichern
Caching-Frameworks verwenden (Encache, Redis, Memcache)
Statische Seite
Generiert mit Template-Technologie (Velocity, FreeMaker usw.)
Datenbankoptimierung
Tabellenstrukturoptimierung
SQL-Anweisungsoptimierung
Partition
Tabelle
Indexoptimierung
Verwenden Sie gespeicherte Prozeduren anstelle von direkten Manipulationsverfahren
Aktive Daten trennen
Batch-Lesen und verzögerte Änderung
Trennung von Lesen und Schreiben
Verteilte Datenbank
NoSQL und Hadoop
Trennung von Anwendungen und statischen Ressourcen: statische Dateien ( Bilder , Videos, JS, CSS usw.) werden auf einem dedizierten Server
Seiten-Caching (Nginx-Server, Squid-Server)
Clustering und Verteilung
Reverse-Proxy
CDN
Grundlegende Optimierung: Netzwerkübertragungsprotokoll
TCP kommuniziert vor der Übertragung dreimal, was als „Drei-Wege-Handshake“ bezeichnet wird. Nach der Übertragung der Daten kommuniziert es viermal, wenn die Verbindung getrennt wird, was als „vier Wellen“ bezeichnet wird.
TCP hat zwei Sequenznummern und drei Flag-Bits, was bedeutet:
seq: Gibt die Sequenznummer der übertragenen Daten an. Jedes Byte während der TCP-Übertragung hat eine Sequenznummer. Wenn der Empfang nicht abgeschlossen ist, wird die erste Sequenznummer an die andere Partei gesendet , muss es erneut übertragen werden. Auf diese Weise kann die Datenintegrität gewährleistet werden.
ack: Gibt die Bestätigungsnummer an. Das empfangende Ende sendet damit die erfolgreich empfangenen Dateninformationen an das sendende Ende zurück. Sein Wert ist die Startsequenznummer des nächsten Datenpakets, das es zu empfangen hofft.
ACK: Bestätigungsbit, Bestätigung funktioniert nur, wenn ACK = 1. Während der normalen Kommunikation ist die ACK 1. Wenn die Anfrage zum ersten Mal initiiert wird, ist die ACK 0, da keine Daten vorhanden sind, die bestätigt werden müssen.
SYN: Synchronisationsbit, das zum Synchronisieren der Sequenznummer beim Verbindungsaufbau verwendet wird. Wenn die Verbindung zum ersten Mal hergestellt wird, gibt es keine Möglichkeit, eine Bestätigung festzulegen. Die Rolle von SYN besteht darin, dieses Problem zu lösen SYN = 1-Bericht Beim Schreiben wird die Bestätigung direkt auf den Wert der empfangenen Sequenz + 1 gesetzt. Beachten Sie, dass der Wert hier nicht nach der Überprüfung festgelegt wird, sondern direkt gemäß SYN festgelegt wird, sodass der normale Mechanismus ausgeführt werden kann. daher heißt SYN Synchronisationsbit. SYN ist in den ersten beiden Handshakes 1, da die Bestätigung beider Kommunikationsparteien einen Anfangswert festlegen muss.
FIN: Beendigungsbit, das zum Lösen der Verbindung nach Abschluss der Datenübertragung verwendet wird.
Beziehen Sie sich auf die Domänennameneinstellungen. Im Folgenden sind meine Einstellungen für den Tencent Cloud-Domänennamen aufgeführt
Datensatztyp:
Ein Eintrag: Verweisen Sie den Domänennamen auf eine IPv4-Adresse (z. B.: 8.8.8.8)
CNAME: Verweisen Sie den Domänennamen auf einen anderen Domänennamen ( z.B. www.54tianzhisheng .cn)
MX: Verweisen Sie den Domainnamen auf die Mailserveradresse
TXT: Kann beliebig ausgefüllt werden, die Länge ist auf 255 begrenzt, normalerweise SPF-Einträge (Anti-Spam)
NS: Domain-Name-Server-Eintrag, geben Sie den Subdomain-Namen an andere DNS-Server zur Auflösung an
AAAA: Verweisen Sie den Domänennamen auf eine iPv6-Adresse (Beispiel: ff06:0:0:0:0:0:0:c3)
SRV: Eintragen der Server, der einen bestimmten Dienst bereitstellt (z. B. xmpp-server.tcp)
Explizite URL: Domainname 301 an eine andere Adresse umleiten
Implizite URL: Ähnlich der expliziten URL, verbirgt jedoch die tatsächliche Zieladresse
Hostdatensatz:
Um www.54tianzhisheng.cn aufzulösen, füllen Sie bitte www aus . Der Host-Eintrag ist das Präfix des Domänennamens:
www: *Der aufgelöste Domänenname ist www.54tianzhisheng.cn.
*@: Löst den Hauptdomänennamen 54tianzhisheng.cn direkt auf.
*: Pananalytisch, passend zu allen anderen Domainnamen *.54tianzhisheng.cn.
mail: löst den Domänennamen in mail.54tianzhisheng.cn auf, der normalerweise zum Auflösen des Postfachservers verwendet wird.
Domänenname der zweiten Ebene: Zum Beispiel: abc.54tianzhisheng.cn, füllen Sie abc aus.
Mobile Website: Zum Beispiel: m.54tianzhisheng.cn, füllen Sie m aus.
Socket ist in zwei Kategorien unterteilt: ServerSocket und Socket.
ServerSocket wird auf der Serverseite verwendet. Es kann über die Accept-Methode auf Anfragen warten und den Socket nach dem Abhören der Anfrage zurückgeben.
Socket-Benutzer schließen die Datenübertragung speziell ab Verwendet Socket direkt zum Senden von Anforderungen und zum Übertragen von Daten.
Ich habe gerade eine Demo zum einseitigen Versenden von Nachrichten geschrieben:
Kunde:
<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;">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; Schriftgröße:13px !important;white-space: !important;">import<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;">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>
java.net
<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;">/**<p style="min-height:1em;"></p></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;"> * Erstellt von 10412 im Jahr 2017 /5/2.<p style="min-height:1em;"></p></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客户端:<p style="min-height:1em;"></p></span>
<span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ①:建立tcp的socket服务,最好明确具体的地址和端口。这个对象在创建时,就已经可以对指定ip和端口进行连接(三次握手)。</span>
<span style="color:rgb(79,103,117);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(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(); } } }
服务器端:
import
<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>
java.io
<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<p style="min-height:1em;"><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important;white-space: !important;"> java<span style="color:rgb(74,74,74);display:block;line-height:22px;font-size:14px !important;"><span style="color:rgb(204,204,204);line- height:20px;font-size:13px !important;white-space: !important;">.<span style="line-height:22px;display:block;"><span style="color:rgb(238,255,255);line-height:20px;font-size:13px !important ;white-space: !important;">io<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;">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>
. InputStream;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;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;">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(); } } }
Das obige ist der detaillierte Inhalt vonWebsite-Architektur und Entwicklung der Spring MVC-Codepraxis. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!