簡體   English   中英

如何從消費者 django 通道外部將數據發送到 websocket

[英]How to send data to a websocket from outside of consumer django channels

我正在嘗試從消費者外部將數據發送到 websocket

所以我做了以下事情:

設置.py

CHANNEL_LAYERS = {
    "default": {
        "BACKEND": "channels_redis.core.RedisChannelLayer",
        "CONFIG": {
            "hosts": [("127.0.0.1", 6379)],
        },
    },
}

路由.py

from django.urls import path

from .consumers import CoinsListConsumer

websocket_urlpatterns = [
    path('ws/coins/', CoinsListConsumer.as_asgi())
]

asgi.py

import os

from django.core.asgi import get_asgi_application
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from channels.security.websocket import AllowedHostsOriginValidator

from apps.coins.routing import websocket_urlpatterns

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'config.settings.local')

application = ProtocolTypeRouter({
    'http': get_asgi_application(),
    'websocket': AllowedHostsOriginValidator(
        AuthMiddlewareStack(
            URLRouter(
                websocket_urlpatterns,
            )
        )
    )
})

消費者.py

class CoinsListConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        logger.info('Websocket was connected.')
        await self.accept()
    
    async def disconnect(self, code):
        logger.warning('Websocket was disconnected.')
        pass

    async def receive(self, text_data=None, bytes_data=None):
        return await super().receive(text_data, bytes_data)

好吧,這沒關系,當我去看風景時...... websocket 將連接得很好

但是當我想將數據發送到 websocket 時。

def send_data_to_websocket_coins_list_view(data: List[Dict]) -> None:
    """Send data to websocket coins list view """
    async_to_sync(channel_layer.send)(json.dumps(data))

這不起作用並引發以下錯誤TypeError: send() missing 1 required positional argument: 'message'

同樣在文檔中,這應該通過以下代碼工作

async_to_sync(channel_layer.send)("channel_name", json.dumps({...}))

它也不起作用並引發以下錯誤AssertionError: message is not a dict

那么問題是什么? 我應該怎么辦?

你不需要轉儲數據

async_to_sync(channel_layer.send)(data)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM