Daphne เป็นเซิร์ฟเวอร์โปรโตคอล HTTP, HTTP2 และ WebSocket สำหรับ ASGI และ ASGI-HTTP ซึ่งพัฒนาขึ้นเพื่อขับเคลื่อน Django Channels
รองรับการเจรจาโปรโตคอลอัตโนมัติ ไม่จำเป็นต้องมีคำนำหน้า URL เพื่อกำหนดตำแหน่งข้อมูล WebSocket เทียบกับตำแหน่งข้อมูล HTTP
เพียงชี้ Daphne ไปที่แอปพลิเคชัน ASGI ของคุณ และเลือกตั้งค่าที่อยู่การเชื่อมโยงและพอร์ตได้ (ค่าเริ่มต้นคือ localhost, พอร์ต 8000):
แดฟนี -b 0.0.0.0 -p 8001 django_project.asgi: แอปพลิเคชัน
หากคุณต้องการรัน daphne หลังพร็อกซีเซิร์ฟเวอร์ คุณสามารถใช้ซ็อกเก็ต UNIX เพื่อสื่อสารระหว่างทั้งสอง:
แดฟนี -u /tmp/daphne.sock django_project.asgi:แอปพลิเคชัน
หาก daphne กำลังรันอยู่ภายในตัวจัดการกระบวนการ คุณอาจต้องการให้รวมเข้ากับตัวอธิบายไฟล์ที่ส่งผ่านมาจากกระบวนการหลัก เพื่อให้บรรลุเป้าหมายนี้ คุณสามารถใช้แฟล็ก --fd:
แดฟนี --fd 5 django_project.asgi:application
หากคุณต้องการควบคุมการผูกพอร์ต/ซ็อกเก็ตมากขึ้น คุณสามารถกลับไปใช้สตริงคำอธิบายจุดสิ้นสุดของ twisted ได้โดยใช้แฟล็ก --endpoint (-e) ซึ่งสามารถใช้ได้หลายครั้ง บรรทัดนี้จะเริ่มต้นเซิร์ฟเวอร์ SSL บนพอร์ต 443 โดยสมมติว่า key.pem และ crt.pem มีอยู่ในไดเร็กทอรีปัจจุบัน (ต้องติดตั้ง pyopenssl):
แดฟนี -e ssl:443:privateKey=key.pem:certKey=crt.pem django_project.asgi:application
ตำแหน่งข้อมูลยังให้คุณใช้ไวยากรณ์ตำแหน่งข้อมูล txacme
เพื่อรับใบรับรองอัตโนมัติจาก Let's Encrypt ซึ่งคุณสามารถอ่านข้อมูลเพิ่มเติมได้ที่ http://txacme.readthedocs.io/en/stable/
หากต้องการดูตัวเลือกบรรทัดคำสั่งที่มีอยู่ทั้งหมดให้รัน daphne ด้วยแฟล็ก -h
Daphne รองรับการยกเลิกการเชื่อมต่อ HTTP/2 แบบเนทีฟ คุณจะต้องทำสองสิ่งเพื่อให้มันใช้งานได้ ขั้นแรก คุณต้องแน่ใจว่าได้ติดตั้ง Twisted http2
และ tls
พิเศษ:
pip ติดตั้ง -U "บิดเบี้ยว [tls, http2]"
ถัดไป เนื่องจากเบราว์เซอร์ปัจจุบันทั้งหมดรองรับเฉพาะ HTTP/2 เมื่อใช้ TLS คุณจะต้องเริ่ม Daphne โดยเปิด TLS ไว้ ซึ่งสามารถทำได้โดยใช้ไวยากรณ์จุดสิ้นสุด Twisted:
แดฟนี -e ssl:443:privateKey=key.pem:certKey=crt.pem django_project.asgi:application
หรือคุณสามารถใช้ไวยากรณ์จุดสิ้นสุด txacme
หรือสิ่งอื่นใดที่เปิดใช้งาน TLS ภายใต้ประทุนได้
คุณจะต้องอยู่ในระบบที่มี OpenSSL 1.0.2 หรือสูงกว่า ; หากคุณใช้ Ubuntu หมายความว่าคุณต้องมี Ubuntu 16.04 เป็นอย่างน้อย
ตอนนี้ เมื่อคุณเริ่มต้น Daphne ควรแจ้งสิ่งนี้ให้คุณทราบในบันทึก:
18-03-2560 19:14:02,741 INFO เริ่มต้นเซิร์ฟเวอร์ที่ ssl:port=8000:privateKey=privkey.pem:certKey=cert.pem เลเยอร์ช่อง django_project.asgi:channel_layer 2017-03-18 19:14:02,742 เปิดใช้งานการสนับสนุนข้อมูล HTTP/2 แล้ว
จากนั้นเชื่อมต่อกับเบราว์เซอร์ที่รองรับ HTTP/2 และทุกอย่างควรจะทำงานได้ มักจะบอกได้ยากว่า HTTP/2 ใช้งานได้ เนื่องจากบันทึกที่ Daphne ให้มาจะเหมือนกัน (ในท้ายที่สุดก็คือ HTTP) และเบราว์เซอร์ส่วนใหญ่ไม่ได้ทำให้ชัดเจนในหน้าต่างตรวจสอบเครือข่าย มีส่วนขยายเบราว์เซอร์ที่จะแจ้งให้คุณทราบอย่างชัดเจนว่าใช้งานได้หรือไม่
ในขณะนี้ Daphne รองรับเฉพาะคำขอ "ปกติ" ผ่าน HTTP/2 เท่านั้น ยังไม่รองรับคุณสมบัติเพิ่มเติมเช่น Server Push อย่างไรก็ตาม มันจะส่งผลให้มีการเชื่อมต่อที่รวดเร็วยิ่งขึ้นและค่าใช้จ่ายที่ลดลง
หากคุณมีพร็อกซีย้อนกลับอยู่ด้านหน้าไซต์ของคุณเพื่อให้บริการไฟล์คงที่หรือคล้ายกัน HTTP/2 จะทำงานก็ต่อเมื่อพร็อกซีนั้นเข้าใจและผ่านการเชื่อมต่ออย่างถูกต้อง
ในการตั้งค่าเส้นทางรากสำหรับ Daphne ซึ่งเทียบเท่ากับการตั้งค่า WSGI SCRIPT_NAME
คุณมีสองตัวเลือก:
Daphne-Root-Path
โดยมีเส้นทางรูทที่ต้องการเป็นค่า ASCII ที่เข้ารหัส URL ส่วนหัวนี้จะไม่ถูกส่งผ่านไปยังแอปพลิเคชัน--root-path
ด้วยเส้นทางรูทที่ต้องการเป็นค่า ASCII ที่เข้ารหัส URL ส่วนหัวจะมีความสำคัญกว่าหากตั้งค่าทั้งสองรายการไว้ เช่นเดียวกับ SCRIPT_ALIAS
ค่าควรเริ่มต้นด้วยเครื่องหมายทับ แต่ไม่ลงท้ายด้วยเครื่องหมายทับ ตัวอย่างเช่น:
แดฟนี --root-path=/forum django_project.asgi:application
Daphne ต้องใช้ Python 3.9 หรือใหม่กว่า
โปรดดูที่ช่องทางหลักที่สนับสนุนเอกสาร
หากต้องการรันการทดสอบ ตรวจสอบให้แน่ใจว่าคุณได้ติดตั้ง tests
เพิ่มเติมพร้อมกับแพ็คเกจ:
ซีดี แดฟนี/ pip ติดตั้ง -e '.[ทดสอบ]' ไพเทสต์
หากต้องการรายงานปัญหาด้านความปลอดภัย โปรดติดต่อ [email protected] สำหรับลายเซ็น GPG และข้อมูลกระบวนการรักษาความปลอดภัยเพิ่มเติม โปรดดู https://docs.djangoproject.com/en/dev/internals/security/
หากต้องการรายงานข้อบกพร่องหรือขอคุณสมบัติใหม่ โปรดเปิดปัญหา GitHub ใหม่
พื้นที่เก็บข้อมูลนี้เป็นส่วนหนึ่งของโครงการ Channels สำหรับทีมคนเลี้ยงแกะและทีมบำรุงรักษา โปรดดูที่ Readme ของช่องหลัก