问题描述
以下是我的其他文件逻辑(除了套接字 io 上下文),其中当管理员删除用户时将调用一个信号。@H_502_1@
@receiver(models.signals.post_delete,sender=Driverprofile)
def delete_user_object(sender,instance,*args,**kwargs):
print("Driver going to delete")
instance.user.profile.delete()
# call socket method
loop = asyncio.new_event_loop()
loop.run_until_complete(user_deleted(instance.user.id))
loop.close()
instance.user.delete()
下面是我的套接字 io 上下文(最后一种方法用于用户删除,我想在其中向连接的用户发出事件)@H_502_1@
#!/usr/bin/env python
# from .models import *
import asyncio
import uvicorn
import socketio,pdb
import pickle
# from registration.models import *
sio = socketio.AsyncServer(async_mode='asgi',cors_allowed_origins="*")
app = socketio.AsgiApp(sio)
background_task_started = False
users = {}
async def background_task():
"""Example of how to send server generated events to clients."""
count = 0
while True:
await sio.sleep(10)
count += 1
# io.to(socketid).emit('message','for your eyes only');
# pdb.set_trace()
await sio.emit('my_response',{'data': 'Server generated event'})
@sio.on('login')
async def login(sid,message):
global users
users[sid] = int(message['userId'])
print("Login users",users)
filename = 'dogs'
outfile = open(filename,'wb')
pickle.dump(users,outfile)
outfile.close()
await sio.emit('my_response',{'data': ''},room=sid)
@sio.on('my_broadcast_event')
async def test_broadcast_message(sid,message):
await sio.emit('my_response',{'data': message['data']})
@sio.on('join')
async def join(sid,message):
sio.enter_room(sid,message['room'])
await sio.emit('my_response',{'data': 'Entered room: ' + message['room']},room=sid)
@sio.on('leave')
async def leave(sid,message):
sio.leave_room(sid,{'data': 'Left room: ' + message['room']},room=sid)
@sio.on('close room')
async def close(sid,{'data': 'Room ' + message['room'] + ' is closing.'},room=message['room'])
await sio.close_room(message['room'])
@sio.on('my_room_event')
async def send_room_message(sid,{'data': message['data']},room=message['room'])
@sio.on('disconnect request')
async def disconnect_request(sid):
global users
del users[sid];
print("AFter logout",users)
await sio.disconnect(sid)
@sio.on('connect')
async def test_connect(sid,environ):
global background_task_started
if not background_task_started:
sio.start_background_task(background_task)
background_task_started = True
await sio.emit('my_response',{'data': 'Connected','count': 0},room=sid)
@sio.on('disconnect')
def test_disconnect(sid):
print('Client disconnected')
# @sio.event
async def user_deleted(userId):
# logic to check whether user is connected or not
# If connected get sid
await sio.emit('my_response',{'data': 'You are deleted by admin',room=sid)
# No reponse is get into the client
if __name__ == '__main__':
uvicorn.run(app,host='0.0.0.0',port=5000)
当我调试这个 user_deleted 协同例程时,它被调用并且没有错误,但客户端仍然没有得到响应@H_502_1@
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)