python websocket客户端和服务端模型

这个示例展示了如何使用Python的Flask和socketIO_client库建立实时通信。client.py文件中定义了一个客户端,它连接到服务器,并触发一个事件以查询版本信息。server.py文件则是一个Flask应用,使用socketIO服务监听并响应客户端的事件,进行数据处理并发送回消息。整个过程演示了后端服务如何与前端进行实时交互。

client.py

# -*- coding: utf-8 -*-

import logging
from socketIO_client import SocketIO, LoggingNamespace


logging.getLogger('socketIO-client').setLevel(logging.DEBUG)
logging.basicConfig()

NAMESPACE = '/test'
EVENT_NAME = 'online_query'


def on_query_version_response(*args):
    print("on_query_version_response", args)


class UpdateNamespace(LoggingNamespace):
    pass


if __name__ == "__main__":

    with SocketIO("127.0.0.1", 8686, resource='test_services') as socketIO:

        def start_query(version):
            upgrade_namespace.emit(EVENT_NAME, {"current_version": version}, on_query_version_response)
            socketIO.wait(seconds=10)

        upgrade_namespace = socketIO.define(UpdateNamespace, NAMESPACE)
        count = 10
        while count <= 10:
            start_query("V4.1.1-20221025")
            count -= 1

server.py

# -*- coding: utf-8 -*-
import time
from flask import Flask
from flask_sqlalchemy import SQLAlchemy
from flask_socketio import SocketIO, Namespace, emit

from vlib.configuration import MysqlConfig

NAMESPACE = '/test'
EVENT_NAME = 'online_query'


app = Flask(__name__)
app.config["SQLALCHEMY_TRACK_MODIFICATIONS"] = True
app.config["SQLALCHEMY_DATABASE_URI"] = MysqlConfig.SQLALCHEMY_DATABASE_URI


socketio = SocketIO(app, cors_allowed_origins="*", path='test_services')
db = SQLAlchemy(app)



class UpgradeServices(Namespace):

    def __init__(self, namespace=None):
        super(UpgradeServices, self).__init__(namespace)

    def _send_msg(self, status, msg):
        socketio.emit(
            'online_query',
            {"status": status, "message": msg},
            namespace='/test'
        )
        socketio.sleep(0.5)

    def test(self, data):
        print("data = {}".format(data))
        self._send_msg('1', '001')
        time.sleep(1)
        self._send_msg('2', '002')
        return {'code': 0, 'msg': 'ok'}

    def on_online_query(self, data):
        """query online version"""
        print('====================== 1')
        self.emit(EVENT_NAME, self.test(data))
        # 进行一些对value的处理或者其他操作,在此期间可以随时会调用emit方法向前台发送消息
        self.emit(EVENT_NAME, 'res 1')
        time.sleep(1)
        self.emit(EVENT_NAME, 'res 2')

        return {'res': 'return online query'}


socketio.on_namespace(UpgradeServices(NAMESPACE))


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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值