2015-12-29 2 views
-1

Je suis très curieux de savoir comment implémenter le code de redirection dans un nœud de serveur arrière. Par exemple: Client Un serveur Web de demande C, il existe un nœud B d'équilibrage de charge entre A et C. Le graphique est donc A=>B=>C=>A (not A=>B=>C=>B=>A). En fait C obtenir des demandes de B, donc je me demande comment C crée un socket pour se connecter à A et envoyer des données à A. Je vous serais reconnaissant de me faire part de quelques extraits de code à ce sujet, merci!Comment implémenter le code que les clients de redirection demandent à un autre nœud

+4

Ceci est plutôt vague. Est-ce que vous faites des requêtes Web? Les requêtes Web peuvent être redirigées avec des codes HTTP, ce qui signifie que A pourra directement contacter C à l'aide d'une URL spécifique. TCP n'autorise pas la redirection native, donc vous devrez faire quelque chose au dessus si vous utilisez du TCP brut. – alpha1554

Répondre

0

Je pense que c'est la question que vous posez:

« Je dispose de plusieurs serveurs Web derrière un équilibreur de charge, alors comment puis-je créer une connexion persistante socket http à un serveur de back-end d'un client sans lui être redirigé vers un autre serveur et donc rompre la connexion? "

La réponse à cette question est à travers l'injection de cookies. Par exemple, avec HAProxy, vous pouvez définir un cookie en fonction du serveur vers lequel la requête est acheminée en premier, puis l'équilibreur de charge saura à l'avenir coller cette requête au serveur spécifié.

Un exemple dans la configuration de back-end HAProxy:

backend socket-servers 
    timeout server 120s 
    balance leastconn 

    # based on cookie set in header 
    # haproxy will add the cookies for us 
    cookie SRVNAME insert 
    server node-1 127.0.0.1:5000 cookie S1 check 
    server node-2 127.0.0.1:5001 cookie S2 check 

Cet exemple a été pris de http://toon.io/configuring-haproxy-multiple-engine-io-servers/.

Lors d'une nouvelle demande, il ne verra aucun cookie et acheminera vers le meilleur serveur en fonction du serveur ayant le moins de connexions. Dans ce cas, il définit un cookie SRVNAME = node-1 ou SRVNAME = node-2 en fonction du serveur vers lequel il va. Chaque requête ultérieure du client va au noeud spécifié dans le cookie.