Каналы без канального слоя или любого другого бесплатного хостинга

У меня есть проект в 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 ответ

Решение

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

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

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

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

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

CHANNEL_LAYERS={
    "default": {
        "BACKEND": "channels.layers.InMemoryChannelLayer"
     }
}
Другие вопросы по тегам