Каналы без канального слоя или любого другого бесплатного хостинга
У меня есть проект в 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"
}
}