怪物奇妙物语

宇宙无敌超级美少男的怪物奇妙物语

首页 新随笔 联系 管理
  819 随笔 :: 0 文章 :: 2 评论 :: 16万 阅读

socketio的小练习

image

服务端

# socketio
import socketio
# fastapi
from fastapi import FastAPI, WebSocket, Request, WebSocketDisconnect
from fastapi.responses import RedirectResponse, HTMLResponse
from fastapi.staticfiles import StaticFiles
from fastapi.openapi.docs import get_swagger_ui_html
from fastapi.templating import Jinja2Templates
from fastapi.middleware.cors import CORSMiddleware
# 启动数据库
# from config.config import initiate_database
# 引入路由
# from routes.scheduler import scheduler_router
# from routes.status import status_router
# from routes.config import config_router
# from routes.control import control_router
# from routes.navigate import navigate_router
# from routes.other import other_router
# from routes.audio import audio_router
# from socket_routes.status import add_status_schedulers
# from websocket.manager import websocketmanager
# scheduler
# from myscheduler.scheduler import scheduler
# docs_url一定要设置成None,才会使用本地的 swagger-ui 的静态文件
app = FastAPI(docs_url=None)
# socketio
sio = socketio.AsyncServer(async_mode="asgi", cors_allowed_origins=[])
app.mount("/ws", socketio.ASGIApp(sio))
app.add_middleware(
CORSMiddleware,
allow_origins=["*"],
allow_credentials=True,
allow_methods=["*"],
allow_headers=["*"],
)
templates = Jinja2Templates(directory="templates")
app.mount('/static', StaticFiles(directory='static'), name='static')
@app.get('/docs', include_in_schema=False)
async def custom_swagger_ui_html():
return get_swagger_ui_html(
openapi_url=app.openapi_url,
title=app.title + " - Swagger UI ",
oauth2_redirect_url=app.swagger_ui_oauth2_redirect_url,
swagger_js_url="/static/swagger-ui/swagger-ui-bundle.js",
swagger_css_url="/static/swagger-ui/swagger-ui.css",
swagger_favicon_url="/static/swagger-ui/favicon.png"
)
# 初始化事件
@app.on_event("startup")
async def start_database():
# await initiate_database()
# 启动定时器
# scheduler.start()
pass
# docs文档
@app.get("/", tags=["Docs"])
async def get_docs():
return RedirectResponse("/docs")
# jinjia2的测试网页
@app.get("/agv", response_class=HTMLResponse)
async def read_jinjia2(request: Request):
return templates.TemplateResponse("index.html", {"request": request })
# websocket的测试网页
@app.get("/websocket", response_class=HTMLResponse)
async def websocket_test(request: Request):
return templates.TemplateResponse("websocket.html", {"request": request})
@app.websocket("/wstest")
async def websocket_endpoint(websocket: WebSocket):
await websocket.accept()
while True:
data = await websocket.receive_text()
await websocket.send_text(f"send from serve: {data}")
# app.include_router(scheduler_router, tags=["Scheduler"], prefix="/scheduler")
# app.include_router(status_router, tags=["Status"], prefix="/status")
# app.include_router(config_router, tags=["Config"], prefix="/config")
# app.include_router(control_router, tags=["Control"], prefix="/control")
# app.include_router(navigate_router, tags=["Navigate"], prefix="/navigate")
# app.include_router(other_router, tags=["Other"], prefix="/other")
# app.include_router(audio_router, tags=['Audio Control'], prefix='/audio')
@sio.event
async def connect(sid, environ):
# 连接成功之后,会自动恢复一个connect事件给前端
print(f'~~~~sid={sid}, {environ["HTTP_ORIGIN"]},连接成功~~~~')
sio.enter_room(sid,'agv')
await sio.emit('message',f'sid={sid},进入房间',room='agv')
@sio.event
async def disconnect(sid):
# 连接成功之后,会自动恢复一个connect事件给前端
print(f'~~~~sid={sid},断开连接~~~~')
sio.leave_room(sid,'agv')
await sio.emit('disconnect',f'sid={sid},离开房间',room='agv')
@sio.event
async def message(sid,data):
# 连接成功之后,会自动恢复一个connect事件给前端
print(f'~~~~data = {data}, message from sid={sid}~~~~')
await sio.emit('message','msg from server',room='agv')
# @sio.on('connect')
# async def connect(sid,environ):
# print(f'sid={sid},连接成功')
# await sio.emit('connect','pong',to=sid)
# @sio.disconnect
# async def disconnect(sid):
# print(f'sid={sid},断开连接')
# client_id代表用户的唯一标识,用来区分不同的用户
# @app.websocket("/ws")
# async def websocket_endpoint(websocket: WebSocket):
# # 将新的socket连接存储起来
# await websocketmanager.connect(websocket)
# try:
# while True:
# # data = await websocket.receive_json()
# data = await websocket.receive_text()
# data_dict = eval(data)
# if 'websocket' in data_dict: # 处理心跳检测
# await websocket.send_text("pong")
# else:
# print('start')
# await add_status_schedulers(websocket)
# except WebSocketDisconnect:
# websocketmanager.disconnect(websocket)
# await websocketmanager.broadcast(f"Client left the chat")

客户端

https://files.cnblogs.com/files/zhuoss/vite-project.7z?t=1674983354

posted on   超级无敌美少男战士  阅读(227)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 微软正式发布.NET 10 Preview 1:开启下一代开发框架新篇章
· 没有源码,如何修改代码逻辑?
· PowerShell开发游戏 · 打蜜蜂
· 在鹅厂做java开发是什么体验
· WPF到Web的无缝过渡:英雄联盟客户端的OpenSilver迁移实战
历史上的今天:
2022-01-29 对象的解构赋值
2022-01-29 数组解构赋值和展开运算符
点击右上角即可分享
微信分享提示