Django 没有通道层或任何其他免费托管的通道

Django 没有通道层或任何其他免费托管的通道,django,redis,channel,django-channels,Django,Redis,Channel,Django Channels,我在django 2.0和django channlels 2.0中有一个项目,我需要主持这个项目。我遵循了文档,能够在localhost和redis上运行频道 但当我在Pythonywhere上托管时,它显示它不支持websocket,所以我在heroku上托管,但他们要求验证信用卡信息,我不必运行redis。是否有其他托管网站,我可以免费运行redis服务器 或者在没有通道层和redis的情况下实现通道是可行的。我的代码在本地主机上运行得很好,但不能免费在线托管 class PageCons

我在django 2.0和django channlels 2.0中有一个项目,我需要主持这个项目。我遵循了文档,能够在localhost和redis上运行频道 但当我在Pythonywhere上托管时,它显示它不支持websocket,所以我在heroku上托管,但他们要求验证信用卡信息,我不必运行redis。是否有其他托管网站,我可以免费运行redis服务器

或者在没有通道层和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
        }))
设置.py

从2.0版开始,通道层是通道的完全可选部分。如果您不想使用它们,只需将CHANNEL_LAYERS设置为unset,或者将其设置为空dict{}

这将意味着您将无法在您所依赖的消费者中使用
self.channel\u layer

所以,它是可选的,但你需要它

:


是的,我也试过了,但在试过之后,我无法找到我应该如何发送消息,我如何才能实现与上面相同的功能。就像group_send,send,因为据我记忆所及,self.channel_层没有返回任何内容。channel层的实际用途是什么?为什么可以将其设置为空?了解它是什么以及为什么不能设置为空。简言之:您需要通道层配置,因为您正在使用通道层。同样地,您需要使用数据库的数据库配置。看起来内存层中存在:
channels.layers.InMemoryChannelLayer
。考虑一下这是否适合你的应用程序。
CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [("127.0.0.1", 6379)],
        },
    },
}
CHANNEL_LAYERS={
    "default": {
        "BACKEND": "channels.layers.InMemoryChannelLayer"
     }
}