Я создаю проект, который состоит из:
- Веб (предоставляет клиенту информацию о вычислениях в реальном времени, пользователь может управлять клиентом с помощью Интернета),
- Клиент (python) консольное приложение без GUI, которое контролируется пользователем из Интернета, выполняет вычисления),
- Сервер (python сервер flask_socketio).
Я хотел бы узнать, когда пользователь запускает сеть и клиент с одного компьютера и связывает этот клиент с веб-сеансом. Вот сценарий:
- Пользователь запускает сеть,
- Веб отправляет
'connect_from_web'
событие сокета на сервер, - Пользователь загружает клиент с помощью сети,
- Пользователь запускает загруженный клиент,
- Клиент отправляет событие сокета
'connect_from_client'
на сервер, - Сервер распознал, что этот
'connect_from_client'
находится на том же компьютере, что и этот 'connect_from_web'
.
Ниже мой код сервера:
from flask import Flask
from flask_socketio import SocketIO, emit
app = Flask(__name__)
socketio = SocketIO(app, cors_allowed_origins='*')
map_web_to_client = {} # Map { web_sid: client_sid }.
@socketio.on('connect_from_web')
def connect_from_web(name):
map_web_to_client[request.sid] = None # There is no launched client for this web yet.
@socketio.on('connect_from_client')
def connect_from_client(name):
# Suppose user does not run multiple sites or clients on same computer.
web_request_sid = None # TODO: Get request.sid from web on same computer.
map_web_to_client[web_request_sid] = request.sid
socketio.run(app)
Есть ли способ сделать это? Я думал, что смогу сгенерировать UUID при запуске клиента. Этот UUID будет скопирован и вставлен в сеть пользователем, поэтому я знаю, какой клиент принадлежит какому вебу. Но это больше для пользователей, и я хотел бы, чтобы что-то было автоматизировано.
EDIT : Я также думал, что сайт сгенерирует UUID и сохранит его в буфере обмена. При запуске клиент считывает UUID из буфера обмена, чтобы и сайт, и клиент имели одинаковый UUID. Тем не менее, в то же время, пользователь может поместить что-нибудь еще в буфер обмена ...