2017-07-20 2 views
0

Ich habe einen sehr einfachen Websocket-Server mit Hilfe von flask eingerichtet.Warum schließt mein WebSocket automatisch mit Flask?

websocket.py

from flask import Flask 
from flask_uwsgi_websocket import GeventWebSocket 
app = Flask(__name__) 
ws = GeventWebSocket(app) 
@app.route('/') 
def index(): 
    return render_template('index.html') 
@ws.route('/foobar') 
def echo(wscon): 
    msg = wscon.receive() 
    if msg is not None: 
     wscon.send(msg) 
if __name__ == '__main__': 
    app.run(gevent=1000, host='0.0.0.0', port=9090) 

index.html

<html> 
    <head> 
     <script language="Javascript"> 
      var s = new WebSocket("ws://192.168.3.49:9090/foobar"); 
      s.onopen = function() { 
       alert("connected !!!"); 
       s.send("js send to server"); 
      }; 
      s.onmessage = function(e) { 
       alert("recv message") 
       var bb = document.getElementById('blackboard') 
       var html = bb.innerHTML; 
       bb.innerHTML = html + '<br/>' + e.data; 
      }; 

      s.onerror = function(e) { 
       alert('error'); 
       alert(e); 
      } 

      s.onclose = function(e) { 
       alert("connection closed"); 
      } 

      function invia() { 
       var value = document.getElementById('testo').value; 
       alert(value); 
       s.send(value); 
      } 
     </script> 
    </head> 
    <body> 
     <h1>WebSocket</h1> 
     <input type="text" id="testo"/> 
     <input type="button" value="invia" onClick="invia();"/> 
     <div id="blackboard" style="width:640px;height:480px;background-color:black;color:white;border: solid 2px red;overflow:auto"> 
     </div> 
    </body> 

wenn ich http://ip:9090 zugreifen, bekomme ich den Schlag Informationen:

verbunden !!!

recv Nachricht

Verbindung geschlossen

warum websocket auto schließen? Und gelegentlich wird es einen Fehler

[uwsgi-http-Schlüssel: 192.168.3.49:9090 client_addr: 192.168.3.1 client_port: 9177] hr_instance_read(): Verbindung von Peer zurückgesetzt [plugins/http/http. c Linie 646]

Antwort

1

Scheint, wie Sie für Echo gevent Server versuchen. Example code

Sie müssen die Verbindung durch eine Schleife laufen lassen. Ändern Sie wie folgt:

@ws.route('/foobar') 
def echo(ws): 
    while True: 
     msg = ws.receive() 
     print(msg) 
     if msg is not None: 
      ws.send(msg) 
     else: 
      return 
Verwandte Themen