【问题标题】:Flask-SocketIO broadcasting to clientFlask-SocketIO 广播到客户端
【发布时间】:2019-10-16 16:58:04
【问题描述】:

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

我做错了什么?

【问题讨论】:

  • 您确定客户端连接了吗?您是否在日志中获得“客户端连接”?还要检查浏览器中的开发者控制台是否存在 Javascript 端的错误
  • 是的,我确实得到了“客户端连接”并且浏览器的控制台中没有任何内容。我刚刚注意到我在我的问题中将 12 误认为 15,现在已更正,所以如果可以的话,请再读一遍。客户端发出的数字 15 被服务器接收。但是客户端没有收到服务器发出的数字 12。

标签: javascript python flask socket.io


【解决方案1】:

我找到了解决方案。 显然 eventlet 不适用于 Python 线程。所以解决方案是“猴子补丁 Python 标准库,以便用 eventlet 友好的版本替换线程、套接字等。”

    import eventlet
    eventlet.monkey_patch()

这对我有用。 我在这里找到了这个解决方案: How to send message from server to client using Flask-Socket IO

【讨论】:

    猜你喜欢
    • 2018-06-18
    • 1970-01-01
    • 2014-07-23
    • 2022-01-22
    • 1970-01-01
    • 2015-05-29
    • 1970-01-01
    • 2016-07-21
    • 1970-01-01
    相关资源
    最近更新 更多