Вы просто неправильно поняли. Ваш send
или emit
от flask-socketio должен быть последним оператором после запроса POST, например:
import sqlite3
from flask import Flask, render_template
from flask_socketio import SocketIO, emit
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app)
@app.route('/', methods=['GET'])
def index():
render_template('index.html')
# listen for data
@app.route('/listen/<data>',methods=['POST'])
def listen(data):
# insert to db
conn = sqlite3.connect('storage.db')
c = conn.cursor()
c.execute('''CREATE TABLE info(num text)''')
c.execute('''INSERT INTO info(num) VALUES(?)''',(data))
conn.commit()
conn.close()
emit('message', 'Change has been made', broadcast=True) # To send all who listen
# This part is, if client sends to server something through 'message' socket. You don't need that,
# @socketio.on('message')
# def handle_message(message):
# send(message)
if __name__ == '__main__':
socketio.run(app)
Поскольку клиент прослушивает сообщения из сокета 'message', вам нужно обработать это в вашем index.html следующим образом:
<head>
<script type="text/javascript"src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.6/socket.io.min.js"></script>
<script type="text/javascript" charset="utf-8">
var socket = io.connect('http://' + document.domain + ':' + location.port);
socket.on('message', function(data) {
console.log(data);
});
</script>
</head>
Существует на стороне клиента и на стороне сервера .
Они оба слушают некоторые изменения с socket.on()
. И они отправляют сообщения или отправляют сообщения с send()
и emit()
.
Клиент может отправлять через сокет «ImHere» -> сервер будет обрабатывать это сообщение с помощью socket.on('ImHere')
-> сервер может запустить другой сокет, с помощью emit
или send
, скажем, сокет «message» -> клиент может обработать его на своей стороне с помощью `socket.on ('message', function (data) {...}).