Inspirado en channels , Nejma le permite administrar y enviar mensajes a grupos de canales
Cosas que puedes construir con nejma :
Eche un vistazo a este ejemplo nejma-chat , una simple aplicación de chat creada con nejma y starlette .
$ pip install nejma Aquí hay un ejemplo de usar nejma con WebSockets.
Primer canal de importación y canal_layer de Nejma
from nejma import Channel , channel_layerCrea un canal en Connect
async def on_connect ( self , websocket , ** kwargs ):
await super (). on_connect ( websocket , ** kwargs )
self . channel = Channel ( send = websocket . send )Agregar grupos, canales o enviar mensajes
async def on_receive ( self , websocket , data ):
self . channel_layer . add ( group , self . channel )
await self . channel_layer . group_send ( group , "Welcome !" )Finnaly, retire el canal una vez que se cierre la conexión
async def on_disconnect ( self , websocket , close_code ):
self . channel_layer . remove_channel ( self . channel ) Para usar nejma con starlette , simplemente importe WebSocketEndpoint desde 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 ) La clase ChannelLayer proporcionada por nejma expone los siguientes métodos:
add(group, channel, send=None)
Agrega un canal a un grupo de donaciones.
self . channel_layer . add ( group , self . channel , send = websocket . send ) async group_send(group, "Welcome !")
Envía un mensaje a un grupo de canales
await self . channel_layer . group_send ( group , "Welcome !" ) remove(group, channel)
Elimina un canal de un grupo dado
self . channel_layer . remove ( group , self . channel ) remove_channel(channel)
Elimina un canal de todos los grupos
self . channel_layer . remove_channel ( self . channel ) flush()
Restablecer todos los grupos
self . channel_layer . flush ()