Architecture du site Web et évolution de la pratique du code Spring MVC

零到壹度
Libérer: 2023-03-22 22:32:01
original
1693 Les gens l'ont consulté

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

Infrastructure

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

Architecture du site Web et évolution de la pratique du code Spring MVC

Solutions pour données massives

  • 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

    Architecture du site Web et évolution de la pratique du code Spring MVC

  • Base de données distribuée

    Architecture du site Web et évolution de la pratique du code Spring MVC

  • NoSQL et Hadoop


Solution à haute concurrence

  • 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

Protocoles et normes communs

Protocole TCP/IP

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.

Architecture du site Web et évolution de la pratique du code Spring MVC


Paramètres DNS

Résolution DNS

Référez-vous aux paramètres du nom de domaine, voici mes paramètres sur le nom de domaine Tencent Cloud

Architecture du site Web et évolution de la pratique du code Spring MVC

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.


Utilisation de Socket en Java

Utilisation de Socket ordinaire

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 :

  1. <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>

  2. <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>

  3. <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

    .
  4. Socket
  5. ;

  6. <span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;">/**</span>

  7. <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>
  8. <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>
  9. <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>
  10. <span style="color:rgb(79,103,117);line-height:20px;font-size:13px !important;white-space: !important;"> ②:如果连接成功,就意味着通道建立了,socket流就已经产生了。只要获取到socket流中的读取流和写入流即可,只要通过getInputStream和getOutputStream就可以获取两个流对象。</span>

  11. <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>

  12. */
    //单方面的输入!
    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();
            }
        }
    }
    Copier après la connexion

服务器端:

  1. 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

    .
  2. IOException
  3. ;

    <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>

  4. <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;">;<🎜><🎜><🎜><🎜>
  5. <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>

  6. /**
     * 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();
            }
        }
    }
    Copier après la connexion

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!

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!