Как отдельно запущенный сервер 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.")
Я хотел бы спросить, что вызвало эту проблему, и что мне делать дальше? Большое спасибо