Как отдельно запущенный сервер socketio взаимодействует с Djangos Models

Я новичок в Django и Socketio. Я пытался развернуть сервер Socketio на основе очередей сообщений, используя Python-Socketio, Eventlet и RabbitMQ, но столкнулся с проблемой. Я хотел проверить, что токен пользователя Django действителен в Socketio и написал следующий код, но Socketio не мог принять события от клиента, как будто сервер Socketio не слушал никаких событий

# shij事件处理函数
import json
import os,sys

BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.extend([BASE_DIR,])
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "background_app.settings")
# 设置环境变量中的 DJANGO_SETTINGS_MODULE 设置为 django 配置
# 启动 django 配置、注册 app 等等初始化操作
import django
django.setup()

from django.core.handlers.wsgi import WSGIRequest
from server import sio
import time, os
from rest_framework_simplejwt.authentication import JWTAuthentication

'''客户端连接过后执行'''

@sio.on('connect')
def on_connect(sid, environ):
    request = WSGIRequest(environ)
    """
    在客户端连接之后被执行
    :param sid:string 客户端设置的用户id
    :environ :http请求数据
    :return:
    """
    token = request.headers.get("token")
    print(token)
    user = JWTAuthentication().get_user(token)
    print(user.username)
    print('sid={}'.format(sid))
    # 向客户端发送事件消息
    msg_data = {
        'msg': 'hello',
        'timestamp': round(time.time() * 1000)
    }
    print("已经发送消息")
    sio.emit('message', msg_data, room=sid)
    # 多事件名称为message则可以直接调用 sio.send(msg_data, room=sid)

# 聊天时使用message事件 传输的聊天格式为json
@sio.on("mymessage")
def mymessage(sid, data):
    print(data)
    print("执行mymessage函数")
    msg_data = {
        "message": "信息已收到",
        "sendtime": time.time()
    }
    sio.enter_room(sid=sid, room="we")
    print(sio.rooms(sid))
    sio.emit("mymessage", data=msg_data, room=sid)


@sio.on("enter_room")
def enter_room(sid, data):
    data_obj = data
    print(data_obj)
    sio.enter_room(sid, room=data_obj["room"])
    sio.emit("message", data={"msg": "进入房间成功"}, room=sid)


@sio.on("roo_msg")
def room_msg(sid, data):
    room = data["room"]
    sio.emit(event="roo_msg", data=data, room=room)


def call_back():
    print("触发message事件")

Однако, когда я удалил код django.setup(), Socketio работал нормально, но сервер сообщал об ошибке

raise AppRegistryNotReady("Apps aren't loaded yet.")

Я хотел бы спросить, что вызвало эту проблему, и что мне делать дальше? Большое спасибо

Вернуться на верх