SocketIO in verschiedenen Klassen (mit Flask)

Sockets, TCP/IP, (XML-)RPC und ähnliche Themen gehören in dieses Forum
Antworten
tschaka81
User
Beiträge: 31
Registriert: Donnerstag 24. Januar 2019, 08:15

Hallo,

ich habe mich heute ein wenig mit SocketIO auseinandergesetzt. Dabei haben einfach Beispiele funktioniert. Ich bin dann zu etwas komplizierterem übergegangen.

Folgendes Szenario:

Code: Alles auswählen

app = Flask(__name__)
socketio = SocketIO(app)
socketslinks(socketio)  # Importiere Socket Links
eventlet.wsgi.server(eventlet.listen(('', 5000)), app)
socketlinks importiert aus einer zweiten Datei folgendes:

Code: Alles auswählen

[b]detectorliste = list_of_devices()[/b]
def socketslinks(socketio):
    detectorliste.socketio = socketio
   
    @socketio.on('my event')
    def handle_message(data):
        print('received message: ' + str(data))

    @socketio.on('test')
    def handle_message(data):
        socketio.emit('my response', data, broadcast=True)
Das klappt schon einmal mit einem einfachen hin und her senden der Daten.

Dann habe ich folgendes gemacht:
detectorliste ist eine weitere Klasse welche ich geschrieben habe. Dort habe ich wie oben gezeigt socketio hinzugefügt

Code: Alles auswählen

class list_of_devices:
    def __init__(self):
        self.detectors = {}
        self.create_detectorlist()
        self.open_all_detectors()
        self.socketio = None

    def test(self):
        self.socketio.emit('my response', "Hallo Welt", broadcast=True)

 
danach führe ich die Methode test aus

Code: Alles auswählen

self.socketio.emit('my response', "Hallo Welt", broadcast=True)
Alles läuft auch ohne Fehler durch. Allerdings schickt socket.io keine Nachrichten an meine Webseite, so wie es die Funktion oben (socketslinks) noch korrekt tat und auch parallel tut.

Habt ihr Ratschläge?
tschaka81
User
Beiträge: 31
Registriert: Donnerstag 24. Januar 2019, 08:15

Hallo,

ich habe die Ursache gefunden:

Das Problem scheint bei eventlet zu liegen. Ändere ich auf die nicht Produktionsumgebung, dann klappt alles. Weiß jemand warum das so ist?

Code: Alles auswählen

socketio.run(app, host='0.0.0.0', port=5000)
#eventlet.wsgi.server(eventlet.listen(('', 5000)), app)
Antworten