Flask-SocketIO вещает на клиента - PullRequest
0 голосов
/ 16 октября 2019

Я прочитал в документации Flask (https://flask -socketio.readthedocs.io / en / latest / # broadcasting ), что отправка сообщения клиенту может быть инициирована событием, возникшим на сервере,Поэтому я решил попробовать это. Идея состоит в том, что клиент отправляет число 15 на сервер каждую секунду, а сервер, независимо от того, что делает клиент, отправляет число 12 клиенту каждые две секунды.

Сторона сервера (.py):

from flask import Flask, jsonify, request, render_template
from flask_socketio import SocketIO, emit

app = Flask(__name__, static_folder='')
io = SocketIO(app, cors_allowed_origins="*")

@io.on('connected')
def connected():
    print("client connected")

@io.on('messageC')
def messageC(data):
    print(data)

def send_messageS():
    io.emit('messageS', 12)

if __name__ == '__main__':
    import _thread, time
    _thread.start_new_thread(lambda: io.run(app), ())

   while True:
       time.sleep(2)
       send_messageS()

клиентская сторона (.html):

<html>
<body>

    <script type="text/javascript" src="//code.jquery.com/jquery-2.1.3.min.js"></script>
    <script type="text/javascript" src="/resources/socket.io.js"></script>
    <script type="text/javascript" charset="utf-8">
        $(document).ready(function(){

           var socket = io.connect('http://localhost:5000');
           socket.on('connect', function() {
              socket.emit('connected');
           });

           socket.on('messageS', function(data) {
              console.log(data);
           });

           setInterval(function() { 
              socket.emit('messageC', 15);
           },1000);

        });
    </script>

</body>

В результате число 15 принимается сервером каждую секунду, но число 12 никогда не принимается сервером. клиент.

Что я делаю не так?

1 Ответ

0 голосов
/ 20 октября 2019

Я нашел решение. По-видимому, eventlet не работает с потоками Python. Поэтому решение состоит в том, чтобы «обезьянить патч стандартной библиотеки Python таким образом, чтобы многопоточность, сокеты и т. Д. Были заменены версиями, удобными для eventlet».

    import eventlet
    eventlet.monkey_patch()

Это помогло мне. Я нашел это решение здесь: Как отправить сообщение с сервера клиенту с помощью Flask-Socket IO

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...