无法从套接字 IO 上下文之外发出事件

问题描述

以下是我的其他文件逻辑(除了套接字 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 (将#修改为@)