Я предлагаю вам посмотреть nginx
, следующий пример конфигурации для маршрутизации.
Предположим, что все клиенты работают на машине A, и машина A имеет ip 8.8.4.5, также nginx работает на машине A:
Часть nginx.conf :
stream {
upstream server1 {
server 8.8.4.4:1000;
}
upstream server2 {
server 8.8.4.4:2000;
}
upstream server3 {
server 8.8.4.4:3000;
}
server {
listen 8090;
server_name nginx1;
proxy_pass server1;
}
server {
listen 8090;
server_name nginx2;
proxy_pass server2;
}
server {
listen 8090;
server_name nginx3;
proxy_pass server3;
}
}
Затем добавьте рядом с файлом hosts:
8.8.4.5 nginx1
8.8.4.5 nginx2
8.8.4.5 nginx3
А клиенты используют для подключения следующее:
- client1: nginx1: 8090
- client2: nginx2: 8090
- client3: nginx3: 8090
Если вы не хотите использовать vhost of nginx, вы можете напрямую использовать несколько ip на одной сетевой карте, тогда вам не нужно устанавливать файл hosts. См это .
PS: Конечно, если ваши клиенты имеют возможность привязываться к разным ips, как я сначала думал, что-то вроде этого:
tcp_client.bind(('8.8.4.1', xxx))
tcp_client.connect((server_ip, server_port))
Тогда также можно использовать remote_addr
для различения соединений, как показано ниже:
stream {
upstream server1 {
server 8.8.4.4:1000;
}
upstream server2 {
server 8.8.4.4:2000;
}
upstream server3 {
server 8.8.4.4:3000;
}
server {
listen 8090;
if ($remote_addr ~* "8.8.4.1")
{
proxy_pass server1;
}
if ($remote_addr ~* "8.8.4.2")
{
proxy_pass server2;
}
if ($remote_addr ~* "8.8.4.3")
{
proxy_pass server3;
}
}
}