【问题标题】:Basic flask-socketio implementation not working; no output or errors基本的 flask-socketio 实现不起作用;没有输出或错误
【发布时间】:2018-02-11 21:59:01
【问题描述】:

我正在尝试将 socketio 与我的烧瓶项目结合起来。现在我正在尝试从服务器获取简单的“已连接”或“已断开”输出。但是,当我使用“python app.py”运行应用程序脚本时,我没有收到这些消息,也没有任何错误将我指向任何方向。

我从没想过我会错过错误!

app.py

from flask import Flask, render_template, request, url_for, copy_current_request_context
from flask_socketio import SocketIO, emit
import logging

logging.basicConfig()

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
app.config['DEBUG'] = True
socketio = SocketIO(app)

@app.route('/scan/')
def waitForRFID():
    return render_template('scan.html')    

@socketio.on('connect', namespace='/test')
def test_connect():
    print('Client connected')

@socketio.on('disconnect', namespace='/test')
def test_disconnect():
    print('Client disconnected')

if __name__ == '__main__':
    socketio.run(app)

scan.html

<!doctype html>
<meta name="viewport" content="width=device-width, initial-scale=1">
<head>
    <script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/1.3.6/socket.io.min.js"></script>
    <script src="{{ url_for('static', filename = 'js/scan.js') }}"></script>
    <link rel=stylesheet type=text/css href="{{ url_for('static', filename='css/scan.css') }}" />
</head>

scan.js

$(document).ready(function(){
    //connect to the socket server.
    var socket = io.connect('http://' + document.domain + ':' + location.port + '/test');
});

当我运行 app.py 文件并访问“127.0.0.1:5000/scan/”时,我在终端中得到以下输出:

127.0.0.1 - - [2018-02-11 16:42:10] "GET /scan/ HTTP/1.1" 200 812 0.010323

网页加载正确,如果我在虚拟环境中运行或在虚拟环境中运行,我会得到相同的输出。

设置如此简单,有什么问题吗?提前谢谢!

【问题讨论】:

    标签: python flask flask-socketio gevent-socketio


    【解决方案1】:

    在尝试使用给定设置重现您的问题时,我注意到 Javascript 控制台中出现以下错误:

    scan.js:1 Uncaught ReferenceError: $ is not defined
        at scan.js:1
    

    您的示例没有加载 jQuery,因此您的 scan.js 在文档加载完成后无法连接到套接字。

    您可以通过在下面包含 CDN 参考来添加 jQuery:

    <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
    

    然后我们看到示例工作:

    127.0.0.1 - - [2018-02-12 07:53:58] "GET /scan/ HTTP/1.1" 200 521 0.010458
    127.0.0.1 - - [2018-02-12 07:53:58] "GET /static/css/scan.css HTTP/1.1" 404 342 0.001086
    127.0.0.1 - - [2018-02-12 07:53:58] "GET /static/css/scan.css HTTP/1.1" 404 342 0.000776
    127.0.0.1 - - [2018-02-12 07:53:58] "GET /socket.io/?EIO=3&transport=polling&t=1518393238311-0 HTTP/1.1" 200 345 0.000879
    Client connected
    127.0.0.1 - - [2018-02-12 07:53:58] "POST /socket.io/?EIO=3&transport=polling&t=1518393238776-1&sid=7d98901d0ef74164975ee5464879ba19 HTTP/1.1" 200 195 0.000818
    127.0.0.1 - - [2018-02-12 07:53:58] "GET /socket.io/?EIO=3&transport=polling&t=1518393238778-2&sid=7d98901d0ef74164975ee5464879ba19 HTTP/1.1" 200 198 0.000201
    

    【讨论】:

    • 感谢您的回复。我将 jQuery 调用添加到 scan.html 文件中,但仍然得到相同的输出。查看您发布的输出时,我注意到我的脚本没有执行(或至少没有报告)css 样式表或 socket.io 的 GET。您为设置安装了哪些库?
    • 我正在使用 Python 3.6.0 并已在我的虚拟环境中安装:click==6.7 Flask==0.12.2 Flask-SocketIO==2.9.3 itsdangerous==0.24 Jinja2==2.10 MarkupSafe==1.0 python-engineio==2.0.2 python-socketio==1.8.4 六==1.11.0 Werkzeug==0.14.1 我建议你检查你的网络控制台看看为什么JS和CSS文件'没有被接走
    • 我将尝试在新的虚拟环境中复制这些库。另外,我正在 ssh-ing 到我的树莓派来编写这段代码并查看输出。如何使用 Web 控制台进行调试?
    • 要使用 websockets,您需要使用网络浏览器远程访问您的树莓派 IP 地址 - 或者您是否在 pi 本身上使用网络浏览器?大多数 Web 浏览器都带有内置的 Web 控制台,您可以使用它来查看客户端错误(例如 javascript 错误、未加载外部资源)
    猜你喜欢
    • 2020-10-31
    • 2017-10-27
    • 2015-07-07
    • 1970-01-01
    • 2022-01-05
    • 1970-01-01
    • 2015-12-01
    • 2021-12-30
    • 2019-05-11
    相关资源
    最近更新 更多