mirror of
https://github.com/fastapi-practices/fastapi_best_architecture.git
synced 2025-08-15 12:03:28 +08:00
56 lines
1.5 KiB
Python
56 lines
1.5 KiB
Python
#!/usr/bin/env python3
|
||
# -*- coding: utf-8 -*-
|
||
import socketio
|
||
|
||
from backend.app.task.conf import task_settings
|
||
from backend.common.log import log
|
||
from backend.common.security.jwt import jwt_authentication
|
||
from backend.core.conf import settings
|
||
|
||
sio = socketio.AsyncServer(
|
||
# 此配置是为了集成 celery 实现消息订阅,如果你不使用 celery,可以直接删除此配置,不会造成任何影响
|
||
client_manager=socketio.AsyncRedisManager(
|
||
f'redis://:{settings.REDIS_PASSWORD}@{settings.REDIS_HOST}:'
|
||
f'{settings.REDIS_PORT}/{task_settings.CELERY_BROKER_REDIS_DATABASE}'
|
||
)
|
||
if task_settings.CELERY_BROKER == 'redis'
|
||
else socketio.AsyncAioPikaManager(
|
||
(
|
||
f'amqp://{task_settings.RABBITMQ_USERNAME}:{task_settings.RABBITMQ_PASSWORD}@'
|
||
f'{task_settings.RABBITMQ_HOST}:{task_settings.RABBITMQ_PORT}'
|
||
)
|
||
),
|
||
async_mode='asgi',
|
||
cors_allowed_origins=settings.CORS_ALLOWED_ORIGINS,
|
||
cors_credentials=True,
|
||
namespaces=['/ws'],
|
||
)
|
||
|
||
|
||
@sio.event
|
||
async def connect(sid, environ, auth):
|
||
if not auth:
|
||
print('ws 连接失败:无授权')
|
||
return False
|
||
|
||
token = auth.get('token')
|
||
if not token:
|
||
print('ws 连接失败:无 token 授权')
|
||
return False
|
||
|
||
if token == 'internal':
|
||
return True
|
||
|
||
try:
|
||
await jwt_authentication(token)
|
||
except Exception as e:
|
||
log.info(f'ws 连接失败:{e}')
|
||
return False
|
||
|
||
return True
|
||
|
||
|
||
@sio.event
|
||
async def disconnect(sid):
|
||
pass
|