gpt4 book ai didi

python - 如何在 ASGI 中使用 StreamingHttpResponse 运行 Django channel

转载 作者:行者123 更新时间:2023-12-05 06:00:03 27 4
gpt4 key购买 nike

我有一个简单的应用程序,它使用打开的 cv 和 wsgi 中设置的服务器流式传输图像。但是每当我将 Django channel 引入图片并将 WSGI 更改为 ASGI 时,流媒体就会停止。如何从 cv2 流式传输图像并同时使用 Django channels?提前谢谢你

我的流媒体代码:

def camera_feed(request):
stream = CameraStream()
frames = stream.get_frames()
return StreamingHttpResponse(frames, content_type='multipart/x-mixed-replace; boundary=frame')

设置.py:

ASGI_APPLICATION = 'photon.asgi.application'

asgi.py

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

最佳答案

首先,我们根本不需要 StramingHTTPResponse 来发送图像数据......

为此,首先,确保您拥有 Django 3.x 和 Python 3.7+ 版本。

然后,安装django-channels第三方包。

如下配置ASGI应用:

import os
from channels.auth import AuthMiddlewareStack
from channels.routing import ProtocolTypeRouter, URLRouter
from django.core.asgi import get_asgi_application
import .routing

os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'myproject.settings')

application = ProtocolTypeRouter({
"http": get_asgi_application(),
"websocket": AuthMiddlewareStack(
URLRouter(
app.routing.websocket_urlpatterns
)
)
})

然后你需要在settings.py文件中设置ASGI_APPLICATION常量:

ASGI_APPLICATION = "myproject.asgi.application"

之后,只需在应用程序中的 consumers.py 文件中创建一个异步 WebSocket 消费者即可:

import json
from channels.generic.websocket import AsyncWebsocketConsumer


class PairingChat(AsyncWebsocketConsumer):

async def connect(self):
self.room_name = self.scope['url_route']['kwargs']['room_name']
self.room_group_name = 'chat_%s' % self.room_name

await self.channel_layer.group_add(
self.room_group_name,
self.channel_name
)

await self.accept()

async def disconnect(self):

await self.channel_layer.group_discard(
self.room_group_name,
self.channel_name
)


# Asyncwebsocket consumer can send any type of data ...

async def receive(self, text_data):
data_json = json.loads(your_data)
message = data_json['message']

await self.channel_layer.group_send(
self.room_group_name,
{
'type': '# send your data from here ...',
'message': message,
'user': self.scope['session']['name']
}
)


async def chat_message(self, event):
message = event['message']

await self.send(data=json.dumps({
'user': event['user'],
'message': message,
}))

同时为 asyncwebsocket 消费者创建一个路由 ...

from django.urls import re_path
from . import consumers

websocket_urlpatterns = [
re_path(r'ws/chat1/(?P<room_name>\w+)/$', consumers.PairingChat.as_asgi()),
]

然后,只需在 javascript 中创建一个 WebSocket 客户端...就可以开始了...

JS Websocket 创建链接:javascript-websocket

关于python - 如何在 ASGI 中使用 StreamingHttpResponse 运行 Django channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67876456/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com