Что-то не так с дорожным балансировочным устройством с круговым движением?Python

Программы на Python
Ответить Пред. темаСлед. тема
Anonymous
 Что-то не так с дорожным балансировочным устройством с круговым движением?

Сообщение Anonymous »

Я делаю дорожный балансировщик l4.
Я делаю 4 сервера, но работают только 2 сервера.
Я написал тестовый код для 10 клиентов, чтобы каждый отправлял по 100 запросов. Однако из портов 8001, 8002, 8003 и 8004 только порты 8001 и 8003 получают соединения от 5 клиентов каждый, и каждый клиент отправляет 100 запросов. Кажется, с циклическим перебором что-то не так, но я не уверен, что именно.
def relay_traffic(self, client_socket, protocol, data):
"""Forward client request to server, and respond to client with server's address"""
try:
server_info = self.get_server(protocol)
if not server_info:
client_socket.sendall(json.dumps({"ack": "failed", "msg": "No server available"}).encode())
return

target_address, target_port = server_info['address'], server_info['port']

# Send server address to client
response = json.dumps({"ack": "redirect", "address": target_address[0], "port": target_port})
client_socket.sendall(response.encode())
print(f"→ Redirected to server: {target_address[0]}:{target_port}")

except Exception as e:
print(f"Error relaying {protocol.upper()} request:", e)
finally:
client_socket.close()

def get_server(self, protocol):
with self.lock:
if protocol in self.servers and self.servers[protocol]:
server = self.servers[protocol][self.current_index[protocol]]
self.current_index[protocol] = (self.current_index[protocol] + 1) % len(self.servers[protocol])
return server
else:
print(f"No server registered for {protocol.upper()} protocol")
return None

def start(self):
print("Load balancer has started.")
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('0.0.0.0', 8080))
server_socket.listen(5)

while True:
try:
connection_socket, client_address = server_socket.accept()

message = connection_socket.recv(1024).decode()
print(f"← {message}")

# Check if it is a server registration request
data = json.loads(message)
if data.get("cmd") == "register":
threading.Thread(target=self.handle_registration, args=(connection_socket, message)).start()
continue

except json.JSONDecodeError:
pass

# Determine request type
if message.startswith("GET") or message.startswith("POST"):
protocol = "api"
elif message.startswith("TCP") or message:
protocol = "tcp"
elif message.startswith("UDP"):
protocol = "udp"
else:
print("Unknown type::", message)
connection_socket.close()
continue

# Select server with round-robin
with self.lock:
if protocol in self.servers and self.servers[protocol]:
server_info = self.servers[protocol][self.current_index[protocol]]
self.current_index[protocol] = (self.current_index[protocol] + 1) % len(self.servers[protocol])
threading.Thread(target=self.relay_traffic, args=(connection_socket, protocol, message)).start()
else:
print(f"No server registered for {protocol.upper()} protocol")
connection_socket.close()

if __name__ == "__main__":
lb = LoadBalancer()
lb.start()


Подробнее здесь: https://stackoverflow.com/questions/791 ... d-balancer
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение
  • Как запретить добавление прокрутки пользовательским круговым курсором?
    Anonymous » » в форуме Php
    0 Ответы
    14 Просмотры
    Последнее сообщение Anonymous
  • Импорт классов моделей из других приложений в Джанго с проблемой с круговым импортом
    Anonymous » » в форуме Python
    0 Ответы
    18 Просмотры
    Последнее сообщение Anonymous
  • Слайдер мультипрокрутки при прокрутке с движением кадра
    Гость » » в форуме Javascript
    0 Ответы
    31 Просмотры
    Последнее сообщение Гость
  • Проблема с движением и стрельбой в игре на питоне.
    Гость » » в форуме Python
    0 Ответы
    22 Просмотры
    Последнее сообщение Гость
  • Вращение куба запускается только движением мыши или нажатием клавиши
    Anonymous » » в форуме C++
    0 Ответы
    25 Просмотры
    Последнее сообщение Anonymous

Вернуться в «Python»