2017-03-05 184 views
2

我已經設置了一個應用程序負載平衡器,將/ws/請求重定向到端口5000,在那裏我有達芙妮與4名工作人員(通過Supervisord重新加載)一起運行。然而,在Chrome控制檯我得到的錯誤Django Channels + Elastic Beanstalk

WebSocket connection to 'wss://api.example.com/ws/' failed: WebSocket is closed before the connection is established.

嘗試通過簡單的JavaScript代碼連接到我的WebSocket時(見Multichat相當接近的東西)。有任何想法嗎?

Routing.py

websocket_routing = [ 
# Called when WebSockets connect 
route("websocket.connect", ws_connect), 

# Called when WebSockets get sent a data frame 
route("websocket.receive", ws_receive), 

# Called when WebSockets disconnect 
route("websocket.disconnect", ws_disconnect), 
] 

Settings.py

# Channel settings 
CHANNEL_LAYERS = { 
"default": { 
    "BACKEND": "asgi_redis.RedisChannelLayer", 
    "CONFIG": { 
     "hosts": ["redis://:[email protected]:6379/0"], 
    }, 
    "ROUTING": "Project.routing.channel_routing", 
}, 

} 

Supervisord.conf

[program:Daphne] 
environment=PATH="/opt/python/run/venv/bin" 
environment=LD_LIBRARY_PATH="/usr/local/lib" 
command=/opt/python/run/venv/bin/daphne -b 0.0.0.0 -p 5000 Project.asgi:channel_layer 
directory=/opt/python/current/app 
autostart=true 
autorestart=true 
redirect_stderr=true 
stdout_logfile=/tmp/daphne.out.log 
[program:Worker] 
environment=PATH="/opt/python/run/venv/bin" 
environment=LD_LIBRARY_PATH="/usr/local/lib" 
command=/opt/python/run/venv/bin/python manage.py runworker -v2 
directory=/opt/python/current/app 
process_name=%(program_name)s_%(process_num)02d 
numprocs=4 
autostart=true 
autorestart=true 
redirect_stderr=true 
stdout_logfile=/tmp/workers.out.log 

daphne.out.log

2017-03-05 00:58:24,168 INFO  Starting server at tcp:port=5000:interface=0.0.0.0, channel layer Project.asgi:channel_layer. 
2017-03-05 00:58:24,179 INFO  Using busy-loop synchronous mode on channel layer 
2017-03-05 00:58:24,182 INFO  Listening on endpoint tcp:port=5000:interface=0.0.0.0 

workers.out.log

2017-03-05 00:58:25,017 - INFO - runworker - Using single-threaded worker. 
2017-03-05 00:58:25,019 - INFO - runworker - Using single-threaded worker. 
2017-03-05 00:58:25,010 - INFO - runworker - Using single-threaded worker. 
2017-03-05 00:58:25,020 - INFO - runworker - Running worker against channel layer default (asgi_redis.core.RedisChannelLayer) 
2017-03-05 00:58:25,020 - INFO - worker - Listening on channels chat.receive, http.request, websocket.connect, websocket.disconnect, websocket.receive 
2017-03-05 00:58:25,021 - INFO - runworker - Running worker against channel layer default (asgi_redis.core.RedisChannelLayer) 
2017-03-05 00:58:25,021 - INFO - worker - Listening on channels chat.receive, http.request, websocket.connect, websocket.disconnect, websocket.receive 
2017-03-05 00:58:25,021 - INFO - runworker - Running worker against channel layer default (asgi_redis.core.RedisChannelLayer) 
2017-03-05 00:58:25,022 - INFO - worker - Listening on channels chat.receive, http.request, websocket.connect, websocket.disconnect, websocket.receive 
2017-03-05 00:58:25,029 - INFO - runworker - Using single-threaded worker. 
2017-03-05 00:58:25,029 - INFO - runworker - Running worker against channel layer default (asgi_redis.core.RedisChannelLayer) 
2017-03-05 00:58:25,030 - INFO - worker - Listening on channels chat.receive, http.request, websocket.connect, websocket.disconnect, websocket.receive 
,失敗之前運行

// Correctly decide between ws:// and wss:// 
var ws_scheme = window.location.protocol == "https:" ? "wss" : "ws"; 
var ws_path = ws_scheme + '://' + window.location.host + "/ws/"; 
console.log("Connecting to " + ws_path); 
var socket = new ReconnectingWebSocket(ws_path); 

顯然

JavaScript代碼,存在這意味着連接達芙妮/工人日誌中沒有相關的輸出可能沒有被正確路由首先。

回答

0

所有設置都正確 - '是一個權限問題。密切關注所有相關的AWS安全組(負載平衡器和屬於目標組成員的實例)。

+0

Hi @Faris。你是如何禁用正常的wsgi主管腳本的。你還需要修改apache conf文件來啓用ws支持。謝謝 –

+0

wsgi仍然在端口80上運行,daphne在端口5000上運行。另外我不認爲wsgi是由彈性beanstalk上的主管運行的有人糾正我,如果我錯了,但我看到的唯一過程是httpd –