小编典典

没有频道层或其他免费托管的频道

redis

我在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)],
        },
    },
}

阅读 240

收藏
2020-06-20

共1个答案

小编典典

从文档

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

这将意味着您将无法self.channel_layer在所依赖的消费者中使用。

因此,它是可选的,但您需要它。

在内存中存在

CHANNEL_LAYERS={
    "default": {
        "BACKEND": "channels.layers.InMemoryChannelLayer"
     }
}
2020-06-20