каналы без канального слоя или любого другого бесплатного хостинга - PullRequest
0 голосов
/ 13 ноября 2018

У меня есть проект в django 2.0 nad django-channlels 2.0, который мне нужен для хостинга. Я следовал документации и смог запустить каналы на localhost вместе с redis, но когда я размещал на pythonanywhere, он показал, что он не поддерживает websocket,Итак, я разместил на heroku, но там они просили проверить информацию о кредитной карте, которую мне не нужно запускать redis.Есть дополнительный хостинг-сайт, на котором я могу запустить redis erver бесплатно

Или это возможнореализовать каналы без channel_layer и redis.Мой код прекрасно работает на локальном хосте, но не может размещаться онлайн бесплатно.

class PageConsumer(WebsocketConsumer):
    def connect(self, **kwargs):
        self.accept()
        channel_layer = get_channel_layer()
        async_to_sync(channel_layer.group_send)("admin", {"type": "analytics.admin_message", "message": "plus"})

    def disconnect(self, close_code):
        channel_layer = get_channel_layer()
        async_to_sync(channel_layer.group_send)("admin", {"type": "analytics.admin_message", "message": "minus"})

соответствующий ему приемник

class ChatConsumer(WebsocketConsumer):
    def connect(self, **kwargs):
        self.accept()
        async_to_sync(self.channel_layer.group_add)("admin", self.channel_name)

    def disconnect(self, close_code):
        async_to_sync(self.channel_layer.group_discard)("admin", self.channel_name)

    def analytics_admin_message(self, something):
        if something["message"] == "plus":
            self.send(text_data=json.dumps({
                'message': "plus"
            }))

        else:
            self.send(text_data=json.dumps({
                'message': "minus"
            }))

    def receive(self, text_data):
        print("data hai bhyi", text_data)
        text_data_json = json.loads(text_data)
        message = text_data_json['message']

        self.send(text_data=json.dumps({
            'message': message
        }))

settings.py

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [("127.0.0.1", 6379)],
        },
    },
}

1 Ответ

0 голосов
/ 13 ноября 2018

из документов

Канальные слои являются полностью дополнительной частью Каналов начиная с версии 2.0. Если вы не хотите их использовать, просто оставьте CHANNEL_LAYERS неустановленным или установите для него пустой dict {}.

Это будет означать, что вы не сможете использовать self.channel_layer для потребителя, на которого вы полагаетесь.

Итак, это необязательно, но вам это нужно.

В памяти существует :

CHANNEL_LAYERS={
    "default": {
        "BACKEND": "channels.layers.InMemoryChannelLayer"
     }
}
...