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

被折叠的 条评论
为什么被折叠?



