2016-01-13 3 views
2

Это похоже на очень простую проблему, но, тем не менее, я запутался, у меня есть приложение Flask, которое обслуживает веб-страницу и общается с этой страницей через Socket.io. Применение Настой выглядит следующим образом:Flask and Flask-SocketIO

app = Flask(__name__) 
socketio = SocketIO(app) 

@socketio.on_error() 
def error_handler(e): 
    print e 

#this fires 
@socketio.on("connect") 
def connect(): 
    print "connected" 

#this does not  
@socketio.on('test') 
def test_handler(message): 
    print "TEST WORKS" 

if __name__ == "__main__": 
    app.run(debug=True, host='0.0.0.0') 
    socketio.run(app) 

Моя сама страница очень проста:

<!doctype html> 
<html> 
    <head> 
    <title>Flask Socket.IO test</title> 
    <style> 
     body { font: 13px Helvetica, Arial; } 
    </style> 

    <script src="socket.io-1.4.3.js"></script> 
    <script src="jquery-2.2.0.min.js"></script> 
    <script> 
     var socket = io("192.168.42.1:5000"); 
     socket.on('connect', function() { 
      console.log(" connected "); 
     }); 
     $(document).ready(function() { 
      $('.startBtn').click(function() { 
       console.log("ok"); 
       socket.emit('test', {data:"start!"}); 
      }); 
     }); 
    </script> 

    </head> 

    <body> 
    <div class="startBtn"> 
     <h1>START</h1> 
    </div> 
    </body> 
</html> 

Я вижу, с обеих сторон, что они соединяют (т.е. событие соединения запускается с обеих сторон), но ничего, что Я отправляю со страницы на сервер. Я предполагаю, что у меня что-то неправильно настроено, но установление связи заставляет меня думать иначе.

+0

«test» не является допустимым сообщением ... интерфейс socketio имеет только «соединение», «разъединение» и «сообщение» ... Я думаю ... в любом случае вам нужен обработчик on_message, который вы разбираете дополнительную информацию о том, что делать ... –

+0

@JoranBeasley Интересно, документация Flask-SocketIO показывает: '@ socketio.on ('my event') def handle_my_custom_event (json):' и соответствующее сообщение, отправленное со страницы HTML: ' socket.emit ('my event', {data: 'I' 'm connected!'}); 'поэтому я предполагаю, что я предполагаю, что вещи, не названные 'message', должны работать? –

+0

Я бы воспользовался кнопкой '' button id = "startBtn"> Щелкните по мне! ', а затем' $ ('# startBtn'). Click (function() {...} '. Я не уверен, что нахождение кликов на этом тексте« START »вообще не работает. –

ответ

3

Таким образом, проблема заключается в том, как я настраивал приложение Flask и socketio. Изменение этого:

app = Flask(__name__) 
socketio = SocketIO(app, async_mode='eventlet') 

@app.route('/') 
def index(): 
    return render_template('index.html') 


@socketio.on('test') 
def josh_test(message): 
    print "test" 

if __name__ == '__main__': 
    socketio.run(app, debug=True) 

сейчас все работает фантастически без изменений в файле HTML. Моя предыдущая версия имела:

if __name__ == "__main__": 
    app.run(debug=True, host='0.0.0.0') 
    socketio.run(app) 

и это было тем, что вызывало проблемы.

Смежные вопросы