Можно ли как-то с Raspberry-сервера отправить код на Raspberry-клиент, выполнить его и результат вернуть на серве? Досталась дипломная работа. Суть:
Есть 3 raspberry, один будет как сервер а два остальных как клиенты. С сервера нужно отправить код на исполнение, клиентам. При чём, у клиентов по сути буду разные программы (перемножение матрицы на вектор, только с разными данными). И по окончании выполнения, каждый клиент должен вернуть результат.
Само собой, если какая-то ошибка, то она должна прийти на сервер и написать что случилось и с какого клиента.
Возможно ли данную задачу решить через Python и socket?
Если нет, что тогда посоветуете использовать?
Если да, как примерно должна выглядеть сторона сервера и сторона клиента? на словах, алгоритмически
Задачу вроде как понимаю. Начал с сокетами разбираться, но а как тогда отправить конкретному клиенту то что мне нужно? Как вообще отправить какой-то код, который обработается на клиенте и пришлёт мне результат?

12 Окт 2020 в 19:49
434 +1
0
Ответы
1

Да, данную задачу можно решить через Python и сокеты.

Примерно алгоритм работы может выглядеть следующим образом:

На сервере создается сокет и начинается прослушивание определенного порта.Клиенты подключаются к серверу, отправляют свое идентификатор и ждут инструкций.Сервер отправляет клиентам код программы для выполнения (например, через метод send() сокета), вместе с данными, если это необходимо.Клиенты выполняют принятый код и отправляют результат обратно серверу (например, также через метод send()).Сервер принимает результаты от клиентов, обрабатывает их и может отправлять новые инструкции или сообщения об ошибке.

Пример кода на стороне сервера:

import socket
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server_socket.bind(('0.0.0.0', 8888))
server_socket.listen(2)
clients = []
while True:
client_socket, address = server_socket.accept()
clients.append(client_socket)
print(f"Connected to {address}")
for client in clients:
client.send(b"Code to execute")
data = client.recv(1024)
print(f"Received data from {address}: {data.decode()}")
client_socket.close()

Пример кода на стороне клиента:

import socket
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client_socket.connect(('server_ip', 8888))
data = client_socket.recv(1024)
# Execute received code
result = "Result"
client_socket.send(result.encode())
client_socket.close()

Обратите внимание, что данная концепция достаточно общая и требует доработки и дополнительных проверок для обеспечения безопасности и надежности передачи данных и выполнения кода на клиентских устройствах.

17 Апр в 22:54
Не можешь разобраться в этой теме?
Обратись за помощью к экспертам
Название заказа не должно быть пустым
Введите email
Бесплатные доработки
Гарантированные бесплатные доработки
Быстрое выполнение
Быстрое выполнение от 2 часов
Проверка работы
Проверка работы на плагиат
Интересные статьи из справочника
Поможем написать учебную работу
Название заказа не должно быть пустым
Введите email
Доверьте свою работу экспертам
Разместите заказ
Наша система отправит ваш заказ на оценку 92 588 авторам
Первые отклики появятся уже в течение 10 минут
Прямой эфир