Мой потребитель выглядит следующим образом:
class pretask(AsyncWebsocketConsumer):
async def connect(self):
self.group_name = "group_test_01"
await self.channel_layer.group_add(
self.group_name,
self.channel_name
)
await self.accept()
async def receive(self, text_data):
message = json.loads(text_data)
await self.channel_layer.group_send(
self.group_name,
{
'type': 'show_in_windows',
'message': message
}
)
async def show_in_windows(self,event):
print("7")
message = event["message"]
print(message)
await self.send(text_data=json.dumps({
"message":message}))
async def disconnect(self, close_code):
pass
Когда я использую клиент для запроса websocket, журнал сервера выглядит следующим образом: он работал нормально。
INFO WebSocket HANDSHAKING /ws/skworkorders/WorkOrderCommit/pretask/ [127.0.0.1:57566]
INFO WebSocket CONNECT /ws/skworkorders/WorkOrderCommit/pretask/ [127.0.0.1:57566]
7
{'csrfmiddlewaretoken': 'YhfDhjZxtPsRqSN8Mo0Nhybt8JY3KLyNWeQ84VBc6F0u8ff4F7npRI1hriSRMRiT', 'title': 'AnsibleCMD-DEV',......}
Но когдаЯ изменил своего потребителя следующим образом: функция web_send не работала
class pretask(AsyncWebsocketConsumer):
async def connect(self):
self.group_name = "group_test_01"
await self.channel_layer.group_add(
self.group_name,
self.channel_name
)
await self.accept()
async def receive(self, text_data):
p1 = TestWebSend(self.group_name,"call out")
p1.sendmsg()
print(text_data)
async def show_in_windows(self,event):
print("7")
message = event["message"]
print(message)
await self.send(text_data=json.dumps({
"message":message}))
async def disconnect(self, close_code):
pass
, класс TestWebSend выглядит следующим образом:
from channels.layers import get_channel_layer
from asgiref.sync import async_to_sync
def web_send(group_name,msg):
print("4")
channel_layer = get_channel_layer()
print("5")
print(group_name)
async_to_sync(channel_layer.group_send)(group_name,
{
'type': 'show_in_windows',
'message': msg
}
)
print("6")
class TestWebSend():
def __init__(self,group_name,msg):
self.msg = msg
print(self.msg)
self.group_name = group_name
print(self.group_name)
def sendmsg(self):
print("3")
web_send(self.group_name, self.msg)
print("8")
Когда я использую клиент для запроса веб-сокета, сервержурнал выглядит следующим образом: async_to_sync (channel_layer.group_send) не работает:
INFO WebSocket HANDSHAKING /ws/skworkorders/WorkOrderCommit/pretask/ [127.0.0.1:58251]
INFO WebSocket CONNECT /ws/skworkorders/WorkOrderCommit/pretask/ [127.0.0.1:58251]
call out
group_test_01
3
4
5
group_test_01
INFO WebSocket DISCONNECT /ws/skworkorders/WorkOrderCommit/pretask/ [127.0.0.1:58251]