Как я могу получить скрипт python flask-socketio, действующий как локальный сервер и одновременно как удаленный клиент? - PullRequest
0 голосов
/ 10 апреля 2019

Моя рабочая настройка на данный момент: У меня есть приложение, которое состоит из сервера python flask-socketio и интерфейса реагирования.Сервер Python собирает некоторые данные с определенного подключенного оборудования и отправляет их через сокеты в интерфейс реагирования.

Что я хочу добавить: Помимо реальных функций, я также хочу добавитьсвязь через сокеты между локальным сервером Python и сервером удаленного узла.Может ли локальный сервер Python выступать в роли локального сервера и удаленного клиента?

Что я пробовал: Я пытался добавить код для socketio-клиента в основной скрипт Pythonсервер.здесь:

from flask_socketio import SocketIO
import socketio

socketio_server = SocketIO(app, async_mode='gevent', engineio_logger=False)

####PART OF THE CODE THAT I TRIED TO ADD THE COMMUNICATION AS A CLIENT###

##Connecting to server as a client
sio = socketio.Client()  # !!! at this point i receive a new connection on remote server, however the code freezes on this line and the script hang on until the end of the connection
sio = socketio.Connect(host, port)
#i want to send data to a specific namespace
sio.emit('remote-client', {'foo':'bar'}) 

########################################################################

# Serve React App
@app.route('/', defaults={'path': ''})

@app.route('/<path:path>')
def serve(path):
    if path != "" and os.path.exists("static" + path):
        return send_from_directory('static', path)
    else:
        return send_from_directory('static', 'index.html')


#---------------------Web Sockets-----------------------------#

@socketio_server.on('connect', namespace='/test')
def test_connect():
    print 'Client Connected'

@socketio_server.on('disconnect', namespace='/test')
def test_disconnect():
    print 'Client disconnected'


if __name__ == '__main__':
    print "Starting Server..."
    socketio_server.run(app, debug=False)
    os.kill(os.getpid(), signal.SIGTERM)

Итак, это правильный подход для достижения того, чего я хочу?Если да, то как скрипт Python может выступать в роли сервера и клиента socketio одновременно?

С уважением, Рикардо

РЕДАКТИРОВАТЬ: Я только что понял, что могу использовать обычные сокеты (импорт сокета) вместе с сервером socketio.Но если у вас есть лучший подход, я рассмотрю!

...