2016-09-09 17 views
7

Tôi đang cố gắng để có được một ứng dụng trò chuyện được hỗ trợ bởi các kênh django để làm việc trên AWS Elastic Beanstalk với bộ cân bằng tải.Lỗi Websocket khi sử dụng cây đậu đàn hồi với các kênh Django

Tôi về cơ bản đang sửa đổi mã từ https://github.com/jacobian/channels-example để làm việc với Cây đậu đàn hồi. Tôi có thể chạy thành công nó cục bộ trên với lệnh

python manage.py runserver 

Vấn đề là khi tôi triển khai nó với Elastic Beanstalk, tôi nhận được lỗi sau khi ứng dụng trò chuyện được đưa ra

WebSocket connection to 'wss://mydomain.com/test/' failed: Error 
during WebSocket handshake: Unexpected response code: 200 

tôi đã cố gắng các giải pháp đề xuất tại https://stackoverflow.com/a/29831723/3667089 nhưng nó chỉ cho thấy một mã lỗi khác nhau

WebSocket connection to 'wss://mydomain.com/test/websocket' failed: 
Error during WebSocket handshake: Unexpected response code: 404 

tôi cũng đã thay đổi cổng nghe cân bằng tải để TCP 80 và thu được chứng chỉ SSL để thay đổi cổng người nghe bảo mật thành SSL 443 nhưng vẫn gặp lỗi tương tự.

Tôi cũng đọc Websockets with socket.io on AWS Elastic Beanstalk nhưng không có tùy chọn định cấu hình máy chủ proxy cho Django, tôi cho rằng nó đang sử dụng Apache theo mặc định.

Tôi thiếu gì đối với cấu hình của Cây đậu đàn hồi để làm cho nó hoạt động?

Có cách nào để thay đổi điều này để chúng tôi có thể chạy máy chủ daphne với asgi không?

+0

Tôi đang chạy các kênh trên AWS VPS và tôi phải sử dụng người giám sát để làm việc đó. Các tài liệu kênh nói rằng bạn cần chạy cả máy chủ ('venv/bin/daphne app.asgi: channel_layer') và công nhân (' python manage.py runwoker') để làm cho mọi thứ hoạt động. Tôi có thể đăng bài của tôi supervisord.conf trong câu trả lời nếu bạn muốn, nhưng tôi không chắc chắn làm thế nào những thứ làm việc trên Elastic Beanstalk. – Brobin

+0

@ Brobin Vâng, điều đó sẽ được đánh giá rất cao – user3667089

+0

Xin lỗi nếu tôi đã quá trễ, nhưng tôi có thể biết bạn đang sử dụng cân bằng tải nào không? Nếu nó cổ điển, nó không hỗ trợ websockets nguyên bản. –

Trả lời

0

Tôi không ở trên cây đậu đàn hồi, nhưng đây là cấu hình của tôi cho VPS. Ubuntu 14.04 với nginx và giám sát viên. Công việc của người giám sát là đảm bảo rằng quy trình máy chủ và nhân viên luôn chạy. Nginx lắng nghe cổng 8000 trên máy chủ cục bộ và chuyển tiếp tới 8080 và 443.

# nginx.conf 
server { 
    listen 8080 default_server; 
    server_name example.com; 
    return 301 https://example.com$request_uri; 
} 

server { 
    listen 443 default_server ssl; 
    server_name example.com; 

    # ... SSL stuff 

    # Send root to the ASGI server 
    location/{ 
     proxy_pass http://localhost:8000; 
     proxy_http_version 1.1; 
     proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; 
     proxy_set_header Upgrade $http_upgrade; 
     proxy_set_header Connection "upgrade"; 
     proxy_set_header Host $host; 
    } 

    # Static Files 
    location /static/ { 
     root /home/ubuntu/project; 
    } 

    # Media Files 
    location /media/ { 
     root /home/ubuntu/project; 
    } 
} 

Đây là cấu hình của tôi cho người giám sát. Tôi khởi động máy chủ chỉ bằng cách khởi động lại người giám sát sudo service supervisor restart

# supervisord.conf 
[program:project_server] 
directory=/home/ubuntu/project/ 
command=/home/ubuntu/project/venv/bin/daphne project.asgi:channel_layer --port 8000 --bind 0.0.0.0 

[program:project_worker] 
process_name=project_worker%(process_num)s 
numprocs=3 
directory=/home/ubuntu/project/ 
command=/home/ubuntu/project/venv/bin/python /home/ubuntu/project/manage.py runworker 

[group:project] 
programs=project_server,project_worker 
Các vấn đề liên quan