Вдохновленные channels , Nejma позволяет вам управлять и отправлять сообщения в группы каналов
Вещи, которые вы можете построить с nejma :
Взгляните на этот пример nejma-chat , простое приложение для чата, созданное с использованием nejma и starlette .
$ pip install nejma Вот пример использования nejma с веб -питаниями.
Первый импортный канал и канал Channel_layer из Nejma
from nejma import Channel , channel_layerСоздайте канал на Connect
async def on_connect ( self , websocket , ** kwargs ):
await super (). on_connect ( websocket , ** kwargs )
self . channel = Channel ( send = websocket . send )Добавить группы, каналы или отправлять сообщения
async def on_receive ( self , websocket , data ):
self . channel_layer . add ( group , self . channel )
await self . channel_layer . group_send ( group , "Welcome !" )Finnaly, удалите канал после закрытия соединения
async def on_disconnect ( self , websocket , close_code ):
self . channel_layer . remove_channel ( self . channel ) Чтобы использовать nejma со starlette , просто импортируйте WebSocketEndPoint из Nejma
from nejma . ext . starlette import WebSocketEndpoint
@ app . websocket_route ( "/ws" )
class Chat ( WebSocketEndpoint ):
encoding = "json"
async def on_receive ( self , websocket , data ):
room_id = data [ 'room_id' ]
message = data [ 'message' ]
username = data [ 'username' ]
if message . strip ():
group = f"group_ { room_id } "
self . channel_layer . add ( group , self . channel )
payload = {
"username" : username ,
"message" : message ,
"room_id" : room_id
}
await self . channel_layer . group_send ( group , payload ) Класс ChannelLayer , предоставленный nejma , раскрывает следующие методы:
add(group, channel, send=None)
Добавляет канал в группу пожертвований.
self . channel_layer . add ( group , self . channel , send = websocket . send ) async group_send(group, "Welcome !")
Отправляет сообщение группе каналов
await self . channel_layer . group_send ( group , "Welcome !" ) remove(group, channel)
Удаляет канал из данной группы
self . channel_layer . remove ( group , self . channel ) remove_channel(channel)
Удаляет канал из всех групп
self . channel_layer . remove_channel ( self . channel ) flush()
Сбросить все группы
self . channel_layer . flush ()