簡體   English   中英

Flask-SocketIO 廣播到客戶端

[英]Flask-SocketIO broadcasting to client

我在 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。

我究竟做錯了什么?

我找到了解決方案。 顯然 eventlet 不適用於 Python 線程。 所以解決方案是“對 Python 標准庫進行猴子補丁,以便將線程、sockets 等替換為 eventlet 友好版本。”

    import eventlet
    eventlet.monkey_patch()

這對我有用。 我在這里找到了這個解決方案: How to send message from server to client using Flask-Socket IO

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM