Используя каналы библиотеки Django (Python), мы создали веб-сервис с функцией чата.
Среди них, используя функцию потребителя, мы создали комнату для чата и получения списка комнат.process.
При получении списка комнат (связь через веб-сокет) на внешней стороне мы можем подключиться к одному окну браузера, но не можем получить список комнат при запуске другого браузера или другой учетной записи дляchrome При попытке получить список номеров в используемом браузере подключение веб-сокета (или получение после подключения) не обрабатывается должным образом.
Я также хотел бы получить список номеров из другого браузера.метод решения.
consumer.py
class RoomListConsumer(AsyncWebsocketConsumer):
groups = ['broadcast']
async def connect(self):
self.scope["session"].save()
self.room = []
self.room_group_name = "room_list" + self.scope['url_route']['kwargs']['id']
await self.channel_layer.group_add(
'room_list',
self.channel_name
)
await self.accept()
async def disconnect(self, close_code):
self.scope["session"].save()
await self.channel_layer.group_discard(
'room_list',
self.channel_name
)
await self.close()
async def receive(self, text_data):
self.scope["session"].save()
await self.setRoomList()
await self.channel_layer.group_send(
self.room_group_name,
{
'type': 'chat_message',
'list': self.room
}
)
async def chat_message(self, event):
await self.send(text_data=json.dumps({
'type': 'chat_message',
'list': self.room
}))
@database_sync_to_async
def setRoomList(self):
# Set Room List
routing.py
websocket_urlpatterns = [
url(r'^chat/list/(?P<id>[^/]+)/$', RoomListConsumer),
url(r'^chat/(?P<id>[^/]+)/(?P<room_name>[^/]+)/$', ChatConsumer)
]
application = ProtocolTypeRouter({
'websocket': AuthMiddlewareStack(
URLRouter(
websocket_urlpatterns
)
),
})