Flask-SocketIO

Flask-SocketIO,第1张

什么是websocket
WebSocket是一种网络通讯协议,
与HTTP不同的是,WebSocket提供全双工通信。
也就是说,传统的方式,只有当客户端发起请求后,服务器端才会发送数据,
而WebSocket可以让服务器主动发送数据给客户端,它是服务器推送技术的一种。

下图是WebSocket和HTTP的区别

pip install flask-socketio

参考网址:

https://flask-socketio.readthedocs.io/en/latest/api.html
https://blog.csdn.net/y472360651/article/details/116545273
https://blog.csdn.net/ieeso/article/details/105040207
https://xugaoxiang.com/2020/10/08/flask-19-socketio/

send 和 emit区别
send发送的是无命名的数据,而emit是发送有命名的数据,个人建议是emit

简单使用
on是注册接收前端消息的方法,message是指接收的信息的名称,和前端对应。
namespace是指一类的消息,和前端对应。
emit是指向前端发送消息,对应的消息的名称、数据和namespace。

默认的两个事件,connect和disconnect,当websocket连接成功和失败时,自动触发这两个事件。

namespace  命名空间
DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>SocketIO Demotitle>
    <script type="text/javascript" src="//cdn.bootcss.com/jquery/3.1.1/jquery.min.js">script>
    <script type="text/javascript" src="//cdn.bootcss.com/socket.io/3.1.2/socket.io.min.js">script>
head>
<body>

<h2>Demo of SocketIOh2>
<div id="t">div>
<script>
$(document).ready(function () {
    namespace = '/dcenter';
    var socket = io.connect(location.protocol + '//' + document.domain + ':' + location.port + namespace);
    socket.on('dcenter', function (res) {
        var t = res.data;
        if (t) {
            $("#t").append(t).append('
'
); } }); });
script> body> html>
from flask import Flask, render_template
from flask_socketio import SocketIO, emit

# pip install flask-socketio

app = Flask(__name__)
# app.config['SECRET_KEY'] = 'secret_key'

socketio = SocketIO()
socketio.init_app(app, cors_allowed_origins='*')
# socketio.init_app(app, cors_allowed_origins='http://localhost')

name_space = '/dcenter'

@app.route('/123')
def hello():
    # How can I send a WebSocket message from here?
    return 'Hello World!'


@app.route('/')
def index():
    return render_template("./index.html")

@app.route('/push')
def push_once():
    event_name = 'dcenter'
    broadcasted_data = {"type":"delete","user_id":"123","data":"1111111111111"}
    socketio.emit(event_name, broadcasted_data, broadcast=False, namespace=name_space)
    return 'done!'

@socketio.on('connect', namespace=name_space)
def connected_msg():
    print('client connected.')

@socketio.on('disconnect', namespace=name_space)
def disconnect_msg():
    print('client disconnected.')

@socketio.on('my_event', namespace=name_space)
def mtest_message(message):
    print(message)
    emit('my_response',
         {'data': message['data'], 'count': 1})

if __name__ == '__main__':
    # app.run(host='0.0.0.0', port=5000, debug=True)
    socketio.run(app, host='0.0.0.0', port=5000, debug=True)
    

欢迎分享,转载请注明来源:内存溢出

原文地址:https://54852.com/langs/873708.html

(0)
打赏 微信扫一扫微信扫一扫 支付宝扫一扫支付宝扫一扫
上一篇 2022-05-13
下一篇2022-05-13

发表评论

登录后才能评论

评论列表(0条)

    保存