你们好,厉害的人们!
我使用 django-channels
创建了一个聊天室。但是每当我试图通过 Websocket 连接到我的聊天室时,在生产环境中都会失败。而在本地却可以正常工作。
我的主机是在digitalocean上。
pip freeze:
channels==2.1.2
channels-redis==2.3.0
daphne==2.2.1
'''
我已经安装了
redis-server
。sudo apt-get install redis-server
这是我的设置。
INSTALLED_APPS = [
# '''
'channels',
# '''
]
CHANNEL_LAYERS = {
'default': {
'BACKEND': 'channels_redis.core.RedisChannelLayer',
'CONFIG': {
"hosts": [os.environ.get('REDIS_URL', 'redis://localhost:6379')],
},
},
}
ASGI_APPLICATION = "project_name.routing.application"
这是我的
asgi.py
和 wsgi.py
代码。import os
import django
from channels.routing import get_default_application
from django.core.wsgi import get_wsgi_application
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "project_name.settings")
django.setup()
application = get_default_application()
这里是我的project_folder.routing.py
application = ProtocolTypeRouter({
'websocket':AllowedHostsOriginValidator(
AuthMiddlewareStack(
URLRouter([
# my urls
])
)
)
})
我在火狐浏览器中经常会看到以下提示,其他浏览器也有类似的提示:
Firefox 无法建立与 wss://www.domain_name.com/url-to/1/XBvZjr2pqdf6fhy/ 的连接。
但是在本地却可以正常运行。
更新:
这是我的 js 代码:
var loc = window.location;
var wsStart = loc.protocol == "https:" ? "wss://" : "ws://"
var endpoint = wsStart + loc.host + loc.pathname
var socket = new ReconnectingWebSocket(endpoint);
socket.onmessage = function(e){
// code
}