实时通信 python + socket

目的:实现服务端像客户端主动发送实时信息

例子:服务端主动向客户端发送100以内的随机数

环境准备

python 3

Flask库

flask_socketio库

服务端

demo_flask.py

import random
from flask import Flask, render_template, sessions, request
from flask_socketio import SocketIO, emit
from threading import Lock
async_mode = None

app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
socketio = SocketIO(app, async_mode=async_mode)
thread = None
thread_lock = Lock()

""" 对app进行一些路由设置 """
@app.route('/')
def index():
    return render_template('index.html', async_mode=socketio.async_mode)


def background_thread():
    while True:
        socketio.sleep(100)
        socketio.emit('my_response', {'data': 'Server generated event'}, namespace='/test')

 """ 对socketio进行一些监听设置 """ 
@socketio.on('connect', namespace='/test')
def mtest_connect():
    global thread
    with thread_lock:
        if thread is None:
            thread = socketio.start_background_task(background_thread)
    emit('my_response', {'data': 'Connected', 'count': 0})

@socketio.on('my_event', namespace='/test')
def mtest_message(message):
    while True:
        i = random.randint(1,100)
        emit('my_response',{'data': message['data'], "num": i})
        socketio.sleep(1)

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

前端页面

index.html

<!DOCTYPE HTML>
<html>
<head>
    <title>Flask-SocketIO Test</title>
    <script src="/code/jquery-3.3.1.min.js" ></script>
    <script src="//cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js" integrity="sha256-yr4fRk/GU1ehYJPAs8P4JlTgu0Hdsp4ZKrx8bDEDC3I=" crossorigin="anonymous"></script>
    <script type="text/javascript" charset="utf-8">
        $(document).ready(function() {
            namespace = '/test';
            var socket = io(namespace);
            socket.on('connect', function() {
                socket.emit('my_event', {data: 'I\'m connected!'});
            });
            socket.on('my_response', function(msg) {
                $("#test_log").val(msg.data);
                $("#test_data").val(msg.num);
            });
        });
    </script>
</head>
<body>
    <h2>测试socketio</h2>
    <h3>接收msg:</h3> <input type="text" id="test_log">
    <h3>接收num:</h3> <input type="text" id="test_data">
</body>
</html>
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值