Соедините сеть и клиент с помощью flask_socketio в Python - PullRequest
0 голосов
/ 04 апреля 2020

Я создаю проект, который состоит из:

  • Веб (предоставляет клиенту информацию о вычислениях в реальном времени, пользователь может управлять клиентом с помощью Интернета),
  • Клиент (python) консольное приложение без GUI, которое контролируется пользователем из Интернета, выполняет вычисления),
  • Сервер (python сервер flask_socketio).

Я хотел бы узнать, когда пользователь запускает сеть и клиент с одного компьютера и связывает этот клиент с веб-сеансом. Вот сценарий:

  1. Пользователь запускает сеть,
  2. Веб отправляет 'connect_from_web' событие сокета на сервер,
  3. Пользователь загружает клиент с помощью сети,
  4. Пользователь запускает загруженный клиент,
  5. Клиент отправляет событие сокета 'connect_from_client' на сервер,
  6. Сервер распознал, что этот '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. Тем не менее, в то же время, пользователь может поместить что-нибудь еще в буфер обмена ...

...