我正在使用Django-Channels来尝试获取实时功能,例如聊天/消息,通知等。现在,我已经使用此处文档中描述的设置在笔记本电脑上正常工作:{{ 3}}。我使用本地redis服务器进行测试。
但是,当我部署到我的Amazon EC2 Elastic Beanstalk服务器(使用AWS ElastiCache Redis)时,WebSocket功能失败。我正在阅读,我认为这是因为亚马逊的HTTPS不支持WebSockets,所以我需要切换到Secure TCP。 我试过这样做: http://channels.readthedocs.io/en/latest/ 和 https://blog.jverkamp.com/2015/07/20/configuring-websockets-behind-an-aws-elb/ 但无济于事。
有没有人在AWS EB上使用CentOS / Apache和Django成功实现WebSockets? Django-Channels包是相当新的,所以如果有人经历过和/或克服了这个障碍,我就赢了。 提前致谢
答案 0 :(得分:2)
AWS推出了支持Web套接字的新Application Load Balancer。将您的ELB更改为应用程序负载均衡器,这将解决您的问题。
https://aws.amazon.com/blogs/aws/new-aws-application-load-balancer/
答案 1 :(得分:2)
正如here所述,可以使用应用程序负载均衡器在Elastic Beanstalk上运行Django通道。
简化形式,基本上是:
答案 2 :(得分:1)
我想这已经很晚了,但我发现了这篇文章http://blog.mangoforbreakfast.com/2017/02/13/django-channels-on-aws-elastic-beanstalk-using-an-alb/
答案 3 :(得分:0)
我认为ALB是唯一的方法。原因是因为使用经典LB中的SSL协议列表器,会话粘性和X-Forwaded标头将不会被转发,并将导致代理服务器重定向循环。 Doc就在这里,
http://docs.aws.amazon.com/elasticloadbalancing/latest/classic/elb-listener-config.html
如果我找到现有CLB的方法,我会更新答案。