Несколько соединений Flask -SocketIO - PullRequest
0 голосов
/ 24 марта 2020

Я пытаюсь создать центральный веб-сервер для других моих веб-интерфейсов, который взаимодействует с различными камерами / устройствами и получает от них информацию. В настоящее время я пытаюсь получить JSON данные (которые в настоящее время работают) и изображение с другого URL-адреса (который не работает), который берется устройством.

До того, как я go любой далее, вот мой код:

main.py

from flask import Flask, render_template, url_for, copy_current_request_context
import requests
from flask_socketio import SocketIO, emit
from threading import Thread, Event
from time import sleep

goProPiCamIP = ''
goProPiCamPort = '5000'
iPhoneIP = '192.168.1.26'  # Example: 10.15.11.61(ask4)
iPhonePort = '8080'  # Example: 8080

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
app.config['DEBUG'] = True

socketio = SocketIO(app, async_mode=None, logger=True, engineio_logger=True)

dataThread = Thread()
imgThread = Thread()
thread_stop_event = Event()


def getData():
    print("getData()")
    while not thread_stop_event.isSet():
        data = requests.get("http://"+iPhoneIP+":"+iPhonePort+"/").text
        print("\n\n " + str(type(data)) + "\n\n")
        print("\n\n" + data + "\n\n")
        socketio.emit('newinfo', {'info': data}, namespace='/data')
        socketio.sleep(0.4)


def getImg():
    print("getImg()")
    while not thread_stop_event.isSet():
        imgData = requests.get("http://"+iPhoneIP+":"+iPhonePort+"/img")
        print("\n\n"+imgData+"\n\n")
        if str(imgData).__contains__("200"):
            print("emitting...")
            socketio.emit('newimg', {'img': imgData.url}, namespace='/img')
            socketio.sleep(1)
        else:
            print(str(imgData))


@app.route("/")
def index():
    return render_template('index.html')


@socketio.on('connect', namespace='/data')
def test_connect():
    global dataThread
    print('Client connected')
    if not dataThread.isAlive():
        print("Starting data thread")
        dataThread = socketio.start_background_task(getData)
    else:
        print("Data Thread is already alive.")


@socketio.on('connect', namespace='/img')
def img():
    global imgThread
    print('Img client connected')
    if not imgThread.isAlive():
        print("starting img thread...")
        imgThread = socketio.start_background_task(getImg)


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


print("Starting server...")
app.run(debug=True, host='0.0.0.0')
print("Server is running.")

main. js

<code>$(document).ready(function () {
//connect to the socket server.
var imgSocket = io.connect('http://' + document.domain + ':' + location.port + '/img');
var infoSocket = io.connect('http://' + document.domain + ':' + location.port + '/data', { 'force new connection': true });
//receive details from server
imgSocket.on('newimg', function (msg) {
    console.log("imgurl " + msg)
    console.log("ImgReceived" + msg);
    img_string = '<img src=' + msg + '>';
    $('#img').html(img_string)
});
infoSocket.on('newinfo', function (msg) {
    console.log("Received " + msg.info);
    info_string = '';
    info_string = '<pre>' + msg.info + '
'; $ ( '# Информация') html (info-string'e). }); });

index. html

<!DOCTYPE html>
<html>

<head>
    <style>
            img {
                width: 30%;
               height: 30%;
               transform: rotate(90)
            }
    </style>
    <script src="//code.jquery.com/jquery-3.3.1.min.js"></script>
    <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.6/socket.io.min.js"></script>
    <script src="static/js/main.js"></script>

</head>

<body>

    <div class="container" id="content">
        <div class="row">
            <h3>iPhone:</h3>
            <div id="info">

            </div>
            <div id="img">

            </div>
        </div>
    </div>
</body>

</html>

In main.py , getData () один работает и асинхронно обновляет веб-страницу каждые 0,4 секунды, однако метод getImg () вообще не работает, в выводе консоли (либо JS, либо Python консоль), и ничего отображается на веб-странице, даже не на img.

Я пытаюсь создать центральный веб-сервер для других моих веб-интерфейсов, который взаимодействует с различными камерами / устройствами и получает от них информацию. В настоящее время я пытаюсь получить JSON данные (которые в настоящее время работают) и изображение с другого URL-адреса (который не работает), который берется устройством.

До того, как я go любой далее, вот мой код:

current webpage.

Я хочу, чтобы img показывался и обновлялся каждую секунду, используя getImg () метод. Я совершенно новичок в использовании SocketIO, поэтому я не знаю, правильно ли я использую синтаксис или нет, поэтому мне трудно определить проблему.

Я прочитал документацию Flask -SocketIO , чтобы попытаться помочь, но я все еще не могу понять, в чем проблема.

Любая помощь будет принята с благодарностью. Спасибо.

...