多个连接Flask-SocketIO

时间:2020-03-24 12:53:57

标签: javascript python html flask flask-socketio

我正在尝试为其他Web界面创建中央Web服务器,以与不同的相机/设备交互并从中获取信息。 目前,我正在尝试从设备获取的JSON数据(当前有效)和另一个URL的图像(无效)中获取图像。

在继续之前,这是我的代码:

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

$(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 + '</pre>';
    $('#info').html(info_string);
  });
});

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>

main.py 中, getData()正在工作,并且每0.4秒异步更新一次网页,但是 getImg() >方法根本不起作用,在控制台输出(JS或Python控制台)中,网页上都没有显示任何内容,甚至没有img。

我正在尝试为其他Web界面创建中央Web服务器,以与不同的相机/设备交互并从中获取信息。 目前,我正在尝试从设备获取的JSON数据(当前有效)和另一个URL的图像(无效)中获取图像。

在继续之前,这是我的代码:

current webpage.

我希望使用 getImg()方法每秒显示和更新img。 我是使用SocketIO的新手,所以我不知道是否没有正确使用语法,因此发现问题很难解决。

我已阅读Flask-SocketIO documentation进行尝试并提供帮助,但是我仍然无法解决问题所在。

任何帮助将不胜感激。谢谢。

0 个答案:

没有答案