daphne-详解

Daphne是一个异步的Web服务器,用于在Django项目中提供WebSocket支持。它的目的是提供高效、快速的HTTP和WebSocket服务,可以处理大量并发连接。下面是一些Daphne的用法

安装

pip3 install daphne 

注意,daphne需要python3.7及以上版本才可安装

集成daphne与django

为了将Daphne集成到Django项目中,需要创建一个ASGI应用程序并将其与Daphne一起使用。创建一个名为asgi.py的ASGI应用程序,示例代码如下:

import os
from django.core.asgi import get_asgi_application
from channels.routing import ProtocolTypeRouter, URLRouter
from django.urls import path
from . import consumers

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

application = ProtocolTypeRouter({
    "http": get_asgi_application(),
    "websocket": URLRouter([
        path("ws/some_path/", consumers.SomeConsumer.as_asgi()),
    ])
})

这个应用程序中包含一个HTTP路由和一个WebSocket路由。HTTP路由使用get_asgi_application()函数返回Django的WSGI应用程序,而WebSocket路由使用URLRouter将URL路径映射到相应的Consumer类。

再将上面用到consumers模块代码补充完整,代码如下:

from channels.generic.websocket import AsyncWebsocketConsumer

class SomeConsumer(AsyncWebsocketConsumer):
    async def connect(self):
        await self.accept()

    async def disconnect(self, close_code):
        pass

    async def receive(self, text_data):
        await self.send(text_data="You said: " + text_data)

这个Consumer类包含了三个方法:connect()disconnect()receive()。在WebSocket连接建立时,connect()方法被调用;当连接关闭时,disconnect()方法被调用;当接收到消息时,receive()方法被调用。

settings.py还需添加如下配置:

ASGI_APPLICATION = 'myproject.asgi.application'     # myproject为 Django 项目的名称

运行

上面代码编写完毕之后,我们可以使用如下命令来启动daphne服务器:

daphne -b <绑定IP> -p <绑定端口> myproject.asgi:application

其中,<绑定IP><绑定端口>为服务器的 IP 地址和端口号,myproject.asgi:application表示 Django 项目的 ASGI 应用程序,myproject为 Django 项目的名称。

例如,以下命令将启动一个绑定在127.0.0.1:8000上,使用4个工作进程的Daphne服务器,并将访问日志输出到access.log文件中:

daphne --bind 127.0.0.1 --port 8000 --workers 4 --access-log access.log myproject.asgi:application

常用参数详解

下面是一些常用的 Daphne 参数:

  • --port: 指定 Daphne 监听的端口,默认为8000
  • --bind: 指定 Daphne 监听的 IP 地址和端口,格式为ip:port
  • --unix-socket: 指定 Daphne 监听的 Unix 域套接字路径。
  • --verbosity: 指定日志详细程度,可选的值有 0(只输出错误信息)、1(输出错误信息和警告信息)、2(输出错误信息、警告信息和一般信息)。
  • --access-log: 指定访问日志文件路径,如果不指定,则不会记录访问日志。
  • --root-path: 指定静态文件根目录,用于提供静态文件服务。
  • --ping-interval: 指定 Websocket ping 的间隔时间,单位为秒,默认为20秒。
  • --ping-timeout: 指定 Websocket ping 超时时间,单位为秒,默认为30秒。
  • --http-timeout: 指定 HTTP 请求超时时间,单位为秒,默认为120秒。
  • --websocket-timeout: 指定 Websocket 连接超时时间,单位为秒,默认为120秒。

至此,Over~~~

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值