Hallo,
ich habe flask_socketio benutzt, um Daten stream-ähnlich zu übertragen. Kann ich irgendwie garantieren, dass die verschiedenen Datenströme in der richtigen Reihenfolge angezeigt werden? Zur Not auch mit Auslassung von Datenblöcken zwecks Geschwindigkeit.
flask_socketio und die Reihenfolge
@Popkultur: Ich denke bei der Frage fehlt noch ein bisschen Kontext. Websockets sind ja an sich schon mal Datenströme, da gehen keine Daten verloren und die Daten kommen in der Reihenfolge an in der sie abgeschickt werden. Wie sieht denn Deine Architektur aus, dass da irgend etwas durcheinander kommen könnte?
Naja, das ganze ist eine letztlich asynchrone Kommunikation zwischen JS und Py:
Codeauszüge:
[codebox=javascript file=Unbenannt.js]
$(function() {
var socket = io('http://127.0.0.1:80');
socket.on('connect', function() {
/*$('div.videoframe canvas').each(function() {
socket.emit('connect', { data: this.id.substr(6,3) });
});*/
});
socket.on('sendpic', function(buffer) {
if (buffer) {
var canvas = document.getElementById('frame-' + buffer['vsnum']);
if (canvas != null) {
var ctx = canvas.getContext('2d');
var img = new Image();
img.src = 'data:image/jpeg;base64,' + _arrayBufferToBase64(buffer['buffer']);
ctx.drawImage(img,0,0,img.width,img.height,0,0,640,360);
}
}
});
});
[/code]
Codeauszüge:
Code: Alles auswählen
# @socketio.on('connect')
def on_connect(vsnum):
videosources = get_vs(type="list", vsnum=vsnum)
c = IpCamera(dict(videosources)[int(vsnum)]['url']);
buffer = c.get_frame()
socketio.emit('sendpic', { 'vsnum': vsnum, 'buffer': buffer, 'status': 0 })
# eventlet.sleep(0.05)
return 'ok'
$(function() {
var socket = io('http://127.0.0.1:80');
socket.on('connect', function() {
/*$('div.videoframe canvas').each(function() {
socket.emit('connect', { data: this.id.substr(6,3) });
});*/
});
socket.on('sendpic', function(buffer) {
if (buffer) {
var canvas = document.getElementById('frame-' + buffer['vsnum']);
if (canvas != null) {
var ctx = canvas.getContext('2d');
var img = new Image();
img.src = 'data:image/jpeg;base64,' + _arrayBufferToBase64(buffer['buffer']);
ctx.drawImage(img,0,0,img.width,img.height,0,0,640,360);
}
}
});
});
[/code]
@Popkultur: Wo spielt denn bei dem gezeigten Code die Reihenfolge eine Rolle? Ich verstehe das Problem ehrlich gesagt auch nicht.
Auweia, ich habe eine while-Schleife im PY-Code unterschlagen, als ich den Code vereinfacht habe. Pardon!
Hier die Korrektur:
Hier die Korrektur:
Popkultur hat geschrieben:Naja, das ganze ist eine letztlich asynchrone Kommunikation zwischen JS und Py:
Codeauszüge:
[codebox=javascript file=Unbenannt.js]Code: Alles auswählen
# @socketio.on('connect') def on_connect(vsnum): videosources = get_vs(type="list", vsnum=vsnum) c = IpCamera(dict(videosources)[int(vsnum)]['url']); # while folgt !!!! while (c.status == 0) and True: buffer = c.get_frame() socketio.emit('sendpic', { 'vsnum': vsnum, 'buffer': buffer, 'status': 0 }) # eventlet.sleep(0.05) return 'ok'
$(function() {
var socket = io('http://127.0.0.1:80');
socket.on('connect', function() {
/*$('div.videoframe canvas').each(function() {
socket.emit('connect', { data: this.id.substr(6,3) });
});*/
});
socket.on('sendpic', function(buffer) {
if (buffer) {
var canvas = document.getElementById('frame-' + buffer['vsnum']);
if (canvas != null) {
var ctx = canvas.getContext('2d');
var img = new Image();
img.src = 'data:image/jpeg;base64,' + _arrayBufferToBase64(buffer['buffer']);
ctx.drawImage(img,0,0,img.width,img.height,0,0,640,360);
}
}
});
});
[/code]