title: django channels websocket closes during handshake
body: <p>I'm trying to integrate a simple chat room into my current website project using this tutorial from the <code>channels</code> readthedocs <a href="https://channels.readthedocs.io/en/latest/tutorial/index.html" rel="nofollow noreferrer">https://channels.readthedocs.io/en/latest/tutorial/index.html</a></p>
  <p>When I try to load the homepage for my website which should automatically connect to the global chat, I get this</p>
  <p>backend console</p>
  <pre><code>HTTP GET / 200 [0.01, 127.0.0.1:58286]
  HTTP GET /static/chatroom/base.css 304 [0.00, 127.0.0.1:58286]
  HTTP GET /static/chatroom/images/profiles/anonymous.jpg 304 [0.00, 127.0.0.1:58288]
  HTTP GET /static/chatroom/images/background.jpg 304 [0.00, 127.0.0.1:58288]
  WebSocket HANDSHAKING /ws/chat/global/ [127.0.0.1:58290]
  WebSocket DISCONNECT /ws/chat/global/ [127.0.0.1:58282]
  </code></pre>
  <p>javascript console</p>
  <pre><code>Firefox can’t establish a connection to the server at ws://127.0.0.1:8000/ws/chat/global/. 127.0.0.1:8000:59:23
  Socket error: [object WebSocket] 127.0.0.1:8000:69:17
  Chat socket closed unexpectedly: 1006
  </code></pre>
  <p>I'm not really sure what code I should give you guys for my example, but here is the code for my consumer, and my settings</p>
  <p>consumers.py</p>
  <pre class="lang-py prettyprint-override"><code># chat/consumers.py
  import json
  from channels.generic.websocket import WebsocketConsumer
  from asgiref.sync import async_to_sync
  
  
  class ChatConsumer(WebsocketConsumer):
      async def connect(self):
          self.room_name = 'global'
          self.room_group_name = 'chat_%s' % self.room_name
  
          # Join room group
          await self.channel_layer.group_add(
              self.room_group_name,
              self.channel_name
          )
  
          await self.accept()
  
      async def disconnect(self, close_code):
          # Leave room group
          await self.channel_layer.group_discard(
              self.room_group_name,
              self.channel_name
          )
  
      # Receive message from WebSocket
      async def receive(self, text_data=None, bytes_data=None):
          text_data_json = json.loads(text_data)
          message = text_data_json['message']
  
          # Send message to room group
          await self.channel_layer.group_send(
              self.room_group_name,
              {
                  'type': 'chat_message',
                  'message': message
              }
          )
  
      # Receive message from room group
      async def chat_message(self, event):
          message = event['message']
  
          # Send message to WebSocket
          await self.send(text_data=json.dumps({
              'message': message
          }))
  </code></pre>
  <p>settings.py (truncated)</p>
  <pre class="lang-py prettyprint-override"><code># chatroom settings
  # https://channels.readthedocs.io/en/latest/tutorial/part_2.html
  
  ASGI_APPLICATION = 'mysite.routing.application'
  CHAT_PORT = 7580
  CHANNEL_LAYERS = {
      'default': {
          'BACKEND': 'channels_redis.core.RedisChannelLayer',
          'CONFIG': {
              &quot;hosts&quot;: ['redis://localhost:{}'.format(CHAT_PORT)]
          },
      }
  }
  </code></pre>
  <p>I tried looking at other posts, but they all seem to use an outdated version, can I get a more up to date answer?</p>