приложение flask и socketIO для синхронизации браузеров между клиентами - PullRequest
0 голосов
/ 12 октября 2018

Я пытаюсь убедиться, что браузеры моего сайта синхронизированы.В частности, текстовое поле в моем приложении для колб с использованием сокетов.Я хотел бы быть в состоянии убедиться, что люди смотрят один и тот же контент примерно в одно и то же время.Это не должно быть немедленным.Если у кого-то есть лучшее решение, чем обновление сокета при каждом нажатии клавиши?

Мой реальный вопрос: почему сокет не печатает сообщение на внутреннем конце при срабатывании эмиттера?

Вот соответствующий код:

from werkzeug import secure_filename
from flask import Flask, render_template, jsonify, make_response, request
import json
import string
import sys
from io import StringIO  # Python3sdf
import OSC
import time
from flask_sqlalchemy import SQLAlchemy
from sqlalchemy.ext import mutable

import os
from flask_socketio import SocketIO, emit


project_dir = os.path.dirname(os.path.abspath(__file__))
database_file = "sqlite:///{}".format(os.path.join(project_dir, "music.db"))

app = Flask(__name__)
socketio = SocketIO(app)
app.config["SQLALCHEMY_DATABASE_URI"] = database_file





@socketio.on('value changed')
def value_changed(message):
    print(message)


@app.route('/')


def my_form():
    song_query = SongClass.query.all()
    if song_query[-1]:
        song = str(song_query[-1])
    else:
    song = " "
    if song_query[-2]:
        song2 = str(song_query[-2])
    else:
    song2 = " "
    return render_template('index.html', song=song, song2=song2)





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

Вот соответствующий код в index.html:

<!DOCTYPE html>
<html>
    <head>

        <title>CodeMirror</title>

                <script type="text/javascript" src="js/jquery.min.js"></script>
                <script type="text/javascript" src="plugin/codemirror/lib/codemirror.js"></script>
                <script type="text/javascript" src="js/default.js"></script>
                <script src="http://ajax.googleapis.com/ajax/libs/jquery/1.11.2/jquery.min.js"></script>
                <script type="text/javascript" src="//cdnjs.cloudflare.com/ajax/libs/socket.io/0.9.16/socket.io.min.js"></script>
<script type="text/javascript" charset="utf-8">
    $(document).ready(function(){
        var socket = io.connect();
        // the socket.io documentation recommends sending an explicit package upon connection
        socket.on('connect', function() {
            socket.emit('connect', {data: 'I\'m connected!'});
        });
        $('#song').on('change keyup paste', function(event) {
            alert("blah");
        socket.emit('value changed',{data: $('#song').val()});
            return false;

     });
});

<div style="float:left;">
    <textarea rows="40" cols="100" name="song" id="song">{{song}}</textarea>


</html>

Я получаю оповещение от jquery, но на бэкэнде ничего не происходит.То есть я не вижу напечатанного сообщения.

1 Ответ

0 голосов
/ 25 октября 2018

Вы используете древнюю версию клиента Socket.IO JavaScript.Используйте версию 2.x, и я думаю, что у вас все будет хорошо.

...