2016-04-21 2 views
3

Как я новичок в websockets, возможно ли создать несколько websocket.receive маршрутов для разных потребителей с разными группами?Несколько websocket.receive в каналах django

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), 
] 

Куда-нибудь посоветуете?

ответ

2

Вот моя реализация для вышеуказанного. Пожалуйста, предложите, если потребуются дополнительные изменения.

#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"), 
] 

Вы можете найти код здесь asifpy/channels-examples

+0

это не работает для меня ... это официальный способ сделать это? здесь они не используют путь для разделения действий, но я думаю, что это тоже должно работать? https://github.com/andrewgodwin/channels-examples – cwirz

+0

Этот ответ не решает проблему. Множество потребителей по одному каналу в настоящее время не имеют смысла - вы определяете разные функции для работы с одними и теми же входящими сообщениями. Какая функция обрабатывает сообщение, концептуально произвольна. Чтобы разделить трафик веб-обозревателя на один из этих трех каналов на разные функции, вам необходимо работать внутри пользователей websocket.xxx. Возможно, путем дальнейшего разбора этого пути. Для получения дополнительной информации см. Https://groups.google.com/forum/#!topic/django-developers/n3cC9AWwTXA. –

Смежные вопросы