2016-04-21 6 views
3

Da ich neu bei Websockets bin, ist es möglich, mehrere Websocket.Receive Routen für verschiedene Verbraucher mit verschiedenen Gruppen zu erstellen?Multiple websocket.receive in django channels

app/consumers.py 
# First receiver 
def ws_receive1(message): 
    Group(
     'Group1', 
     channel_layer=message.channel_layer 
     ).send({'text': "receiver1"}) 

def ws_receive2(message): 
    Group(
     'Group2', 
     channel_layer=message.channel_layer 
     ).send({'text': "receiver2"}) 

# routing.py 
channel_routing = [ 
    route("websocket.connect", consumers.ws_connect1), 
    route("websocket.disconnect", consumers.ws_disconnect1), 
    route("websocket.receive", consumers.ws_receive1), 

    route("websocket.connect", consumers.ws_connect2), 
    route("websocket.disconnect", consumers.ws_disconnect2), 
    route("websocket.receive", consumers.ws_receive2), 
] 

Irgendwelche Ratschläge?

Antwort

2

Hier ist meine Implementierung für die oben genannten. Bitte schlagen Sie vor, wenn weitere Änderungen erforderlich sind.

#app1/routing.py 

from channels.routing import route 
from . import consumers 

post_websocket = [ 
    route("websocket.connect", consumers.websocket_connect), 
    route("websocket.disconnect", consumers.websocket_disconnect) 
] 

vote_websocket = [ 
    route("websocket.connect", consumers.websocket_voteconnect), 
    route("websocket.receive", consumers.ws_updatevotes), 
    route("websocket.disconnect", consumers.websocket_votedisconnect) 
] 


# myproject/routing.py 
from channels import include 

channel_routing = [ 
    include("app1.routing.post_websocket", path=r"^/app1/post/notification"), 
    include("app1.routing.vote_websocket", path=r"^/app1/vote/notification"), 
] 

Sie können den Code hier finden asifpy/channels-examples

+0

dies nicht funktioniert für mich ... ist dies der offizielle Weg, es zu tun? Hier verwenden sie nicht den Weg, um Aktionen aufzuteilen, aber ich denke, das sollte auch funktionieren. https://github.com/andrewgodwin/channels-examples – cwirz

+0

Diese Antwort adressiert das Problem nicht. Mehrere Konsumenten auf einem einzelnen Kanal sind derzeit nicht sinnvoll - Sie definieren verschiedene Funktionen, um mit den gleichen eingehenden Nachrichten umzugehen. Welche Funktion die Nachricht behandelt, ist konzeptionell beliebig. Um den auf einem dieser drei Kanäle eingehenden WebSocket-Verkehr in verschiedene Funktionen aufzuteilen, müssen Sie innerhalb der Websocket.xxx-Benutzer arbeiten. Vielleicht, indem man den Pfad dort weiter analysiert. Weitere Informationen finden Sie unter https://groups.google.com/forum/#!topic/django-developers/n3cC9AWwTXA. –