Cet article partage avec vous l'architecture du site Web et l'évolution de la pratique du code Spring MVC. Le contenu est assez bon. J'espère qu'il pourra aider les amis dans le besoin
Architecture du site Web. et son évolution
Méthode de décomposition de la transmission réseau :
Modèle de référence OSI standard
Modèle de référence TCP/IP
Mise en cache et statique de pages
Cache
Enregistrer directement en mémoire via le programme
Utiliser des frameworks de mise en cache (Encache, Redis, Memcache)
Page statique
Généré à l'aide de la technologie de modèles (Velocity, FreeMaker, etc.)
Optimisation de la base de données
Optimisation de la structure des tables
Optimisation des instructions SQL
Partition
Table
Optimisation de l'index
Utilisez des procédures stockées au lieu de procédures de manipulation directe
Séparez les données actives
Lecture batch et modification différée
Séparation de la lecture et de l'écriture
Base de données distribuée
NoSQL et Hadoop
Séparation des applications et des ressources statiques : fichiers statiques ( Images , vidéos, JS, CSS, etc.) sont placés sur un serveur dédié
Mise en cache des pages (serveur Nginx, serveur Squid)
Clustering et distribution
Proxy inverse
CDN
Optimisation sous-jacente : Protocole de transmission réseau
IP : Adresse de recherche, correspondant à l'Internet international
TCP : Spécification Règles de transmission, correspondant à la couche de transmission
TCP communiquera trois fois avant la transmission, ce que l'on appelle « poignée de main à trois voies ». Après la transmission des données, il communiquera quatre fois lorsqu'il est déconnecté, ce que l'on appelle « quatre vagues ».
TCP a deux numéros de séquence et trois bits de drapeau signifiant :
seq : Indique le numéro de séquence des données transmises. Chaque octet lors de la transmission TCP a un numéro de séquence. Lors de l'envoi de données, le premier numéro de séquence des données sera envoyé à l'autre partie. Le récepteur vérifiera si la réception est terminée en fonction du numéro de séquence. , il doit être retransmis. De cette façon, l’intégrité des données peut être garantie.
ack : Indique le numéro de confirmation. L'extrémité réceptrice l'utilise pour renvoyer à l'extrémité émettrice les informations de données qui ont été reçues avec succès. Sa valeur est le numéro de séquence de départ du prochain paquet de données qu'il espère recevoir.
ACK : Bit d'accusé de réception, ack ne fonctionne que lorsque ACK = 1. Lors d'une communication normale, l'ACK est 1. Lorsque la demande est lancée pour la première fois, l'ACK est 0 car aucune donnée n'a besoin d'être confirmée.
SYN : Bit de synchronisation, utilisé pour synchroniser le numéro de séquence lors de l'établissement d'une connexion. Lorsque la connexion est établie pour la première fois, il n'y a pas d'historique des données reçues, il n'y a donc aucun moyen de définir un accusé de réception. Cela ne fonctionnera pas selon le mécanisme normal. Le rôle de SYN est de résoudre ce problème lorsque l'extrémité réceptrice reçoit le. SYN = 1 rapport Lors de l'écriture, l'accusé de réception sera directement défini sur la valeur de la séquence reçue + 1. Notez que la valeur ici n'est pas définie après vérification, mais est définie directement selon SYN, afin que le mécanisme normal puisse fonctionner, donc SYN est appelé bit de synchronisation. SYN sera égal à 1 lors des deux premières poignées de main, car l'acquittement des deux parties dans la communication doit définir une valeur initiale.
FIN : Bit de terminaison, utilisé pour libérer la connexion une fois la transmission des données terminée.
Référez-vous aux paramètres du nom de domaine, voici mes paramètres sur le nom de domaine Tencent Cloud
Type d'enregistrement :
Un enregistrement : Pointez le nom de domaine vers une adresse IPv4 (ex. : 8.8.8.8)
CNAME : Pointez le nom de domaine vers un autre nom de domaine ( par exemple www.54tianzhisheng .cn)
MX : Pointez le nom de domaine vers l'adresse du serveur de messagerie
TXT : Peut être renseigné arbitrairement, la longueur est limitée à 255, généralement des enregistrements SPF (Anti-spam)
NS : enregistrement du serveur de noms de domaine, spécifiez le nom du sous-domaine aux autres serveurs DNS pour résolution
AAAA : Pointez le nom de domaine vers une adresse iPv6 (Exemple : ff06:0:0:0:0:0:0:c3)
SRV : Enregistrer le serveur qui fournit un service spécifique (par exemple xmpp-server.tcp)
URL explicite : Rediriger le nom de domaine 301 vers une autre adresse
URL implicite : similaire à une URL explicite, mais masquera la véritable adresse cible
Enregistrement de l'hôte :
Pour résoudre www.54tianzhisheng.cn, veuillez remplir www. . L'enregistrement d'hôte est le préfixe du nom de domaine. Les usages courants sont :
www : *Le nom de domaine résolu est www.54tianzhisheng.cn.
*@: Résout directement le nom de domaine principal 54tianzhisheng.cn.
* : Pan-analytique, correspondant à tous les autres noms de domaine *.54tianzhisheng.cn.
mail : résout le nom de domaine en mail.54tianzhisheng.cn, qui est généralement utilisé pour résoudre le serveur de boîte aux lettres.
Nom de domaine de deuxième niveau : Par exemple : abc.54tianzhisheng.cn, remplissez abc.
Site Web mobile : Par exemple : m.54tianzhisheng.cn, remplissez m.
Socket est divisé en deux catégories : ServerSocket et Socket.
ServerSocket est utilisé côté serveur. Il peut écouter les requêtes via la méthode d'acceptation et renvoie le Socket après avoir écouté la requête
Les utilisateurs de Socket terminent spécifiquement la transmission des données et le client ; utilise directement Socket pour envoyer des requêtes et transmettre des données.
Je viens d'écrire une démo pour envoyer des messages unilatéralement :
Client :
<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; font-size: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;"> * Créé par 10412 en 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;"> ②:如果连接成功,就意味着通道建立了,socket流就已经产生了。只要获取到socket流中的读取流和写入流即可,只要通过getInputStream和getOutputStream就可以获取两个流对象。</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- hauteur: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;<🎜><🎜><🎜><🎜><🎜> <🎜><🎜><🎜>< 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); hauteur de ligne:20px;taille de police:13px !important;espace blanc: !important;"> java<🎜><span style="color:rgb(204,204,204);hauteur de ligne:20px;font-size:13px !important;espace blanc : !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;espace blanc: !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>
/** * 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(); } } }
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!