【发布时间】:2019-01-27 01:24:07
【问题描述】:
大家好!
我用django-channels 创建了一个聊天室。每次我尝试在生产中通过网络套接字连接到我的聊天室时,它都会失败。
在本地它可以正常工作。
我在 digitalocean
上托管点冻结:
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.rounting.py
application = ProtocolTypeRouter({
'websocket':AllowedHostsOriginValidator(
AuthMiddlewareStack(
URLRouter([
# my urls
])
)
)
})
我在 Firefox 中不断得到这个,在其他浏览器中也有类似的东西:
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
}
【问题讨论】:
-
我已经尝试解决这个问题一个多月了/=您是否部署在 Ubuntu 上?
-
嗨@Eu Chi ...我看到您正在使用wss(安全websocket)连接...您是否已保护它,并为正确的端口保护它?如果将所有内容都移到常规的旧 ws 会发生什么?
-
是的,我正在使用 Ubuntu @Mint
-
感谢@MichaelRoberts 的提问,我正在使用 SSL 连接,如果我在没有它的情况下尝试使用 ws,则会通过说 连接不安全 来拒绝连接
-
不确定这是否有帮助:github.com/django/channels/issues/514
标签: django websocket redis django-channels daphne