Я пытаюсь создать центральный веб-сервер для других моих веб-интерфейсов, который взаимодействует с различными камерами / устройствами и получает от них информацию. В настоящее время я пытаюсь получить 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 любой далее, вот мой код:

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