我在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 }))
CHANNEL_LAYERS = { "default": { "BACKEND": "channels_redis.core.RedisChannelLayer", "CONFIG": { "hosts": [("127.0.0.1", 6379)], }, }, }
从文档
从2.0版开始,通道层是通道的完全可选部分。如果您不想使用它们,只需将CHANNEL_LAYERS保持未设置状态,或将其设置为空的dict {}。
这将意味着您将无法self.channel_layer在所依赖的消费者中使用。
self.channel_layer
因此,它是可选的,但您需要它。
在内存中存在:
CHANNEL_LAYERS={ "default": { "BACKEND": "channels.layers.InMemoryChannelLayer" } }