title: Sending data from Python Web socket client to Django Channels
body: <p>I am trying to send data to Django Channels (<a href="https://channels.readthedocs.io/en/latest/tutorial/part_3.html" rel="nofollow noreferrer">chat application</a>) from <a href="https://pypi.python.org/pypi/websocket-client" rel="nofollow noreferrer">Python web socket client</a> .
  I am able to do the handshake but my data (string) is not being populated in the chat web page.</p>
  
  <p><strong>My consumers of django channels</strong></p>
  
  <p><strong>consumers.py</strong></p>
  
  <pre><code>class EchoConsumer(WebsocketConsumer):
  
      def connect(self):
          self.room_name = self.scope['url_route']['kwargs']['room_name']
          self.room_group_name = 'power_%s' % self.room_name
  
          # Join room group
          async_to_sync(self.channel_layer.group_add)(
              self.room_group_name,
              self.channel_name
          )
  
          self.accept()
  
      def disconnect(self, close_code):
          # Leave room group
          async_to_sync(self.channel_layer.group_discard)(
              self.room_group_name,
              self.channel_name
          )
  
          # Receive message from WebSocket
  
      def receive(self, text_data):
          text_data_json = json.loads(text_data)
          message = text_data_json['message']
  
          # Send message to room group
          async_to_sync(self.channel_layer.group_send)(
              self.room_group_name,
              {
                  'type': 'chat_message',
                  'message': message
              }
          )
  
          # Receive message from room group
  
      def chat_message(self, event):
          message = event['message']
  
          # Send message to WebSocket
          self.send(text_data=json.dumps({
              'message': message
          }))
  </code></pre>
  
  <p><strong>My Python web socket client</strong></p>
  
  <p><strong>my-websocket.py</strong></p>
  
  <pre><code>def on_message(ws, message):
      print (message)
  
  def on_error(ws, error):
      print ("eroror:", error)
  
  def on_close(ws):
      print ("### closed ###")
      # Attemp to reconnect with 2 seconds interval
      time.sleep(2)
      initiate()
  
  def on_open(ws):
      print ("### Initiating new websocket connectipython my-websocket.pyon ###")
      def run(*args):
          for i in range(30000):
              # Sending message with 1 second intervall
              time.sleep(1)
  
              ws.send("Hello %d" % i)
          time.sleep(1)
          ws.close()
          print ("thread terminating...")
      _thread.start_new_thread(run, ())
  
  def initiate():
      websocket.enableTrace(True)
      ws = websocket.WebSocketApp("ws://localhost:8000/ws/power/room/",
          on_message = on_message,
          on_error = on_error,
          on_close = on_close)
      ws.on_open = on_open
  
      ws.run_forever()
  
  if __name__ == "__main__":
      initiate()
  </code></pre>
  
  <p><strong>The error i am receiving at ASGI server is</strong> </p>
  
  <pre><code>WebSocket CONNECT /ws/power/room/ [127.0.0.1:50918]
  Exception inside application: Expecting value: line 1 column 1 (char 0)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\channels\sessions.py", line 179, in __call__
      return await self.inner(receive, self.send)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\channels\middleware.py", line 41, in coroutine_call
      await inner_instance(receive, send)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\channels\consumer.py", line 59, in __call__
      [receive, self.channel_receive], self.dispatch
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\channels\utils.py", line 52, in await_many_dispatch
      await dispatch(result)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\asgiref\sync.py", line 108, in __call__
      return await asyncio.wait_for(future, timeout=None)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\asyncio\tasks.py", line 388, in wait_for
      return await fut
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\concurrent\futures\thread.py", line 57, in run
      result = self.fn(*self.args, **self.kwargs)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\channels\db.py", line 13, in thread_handler
      return super().thread_handler(loop, *args, **kwargs)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\asgiref\sync.py", line 123, in thread_handler
      return self.func(*args, **kwargs)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\channels\consumer.py", line 105, in dispatch
      handler(message)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\channels\generic\websocket.py", line 60, in websocket_receive
      self.receive(text_data=message["text"])
    File "C:\Users\Admin\PycharmProjects\power\myChannels\consumers.py", line 41, in receive
      text_data_json = json.loads(text_data)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\json\__init__.py", line 348, in loads
      return _default_decoder.decode(s)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\json\decoder.py", line 337, in decode
      obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\json\decoder.py", line 355, in raw_decode
      raise JSONDecodeError("Expecting value", s, err.value) from None
    Expecting value: line 1 column 1 (char 0)
  WebSocket DISCONNECT /ws/power/room/ [127.0.0.1:50918] 
  </code></pre>
  
  <p>where as the error which i am receiving at client end is </p>
  
  <pre><code>WebSocket HANDSHAKING /ws/power/room/ [127.0.0.1:50918]
  WebSocket CONNECT /ws/power/room/ [127.0.0.1:50918]
  Exception inside application: Expecting value: line 1 column 1 (char 0)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\channels\sessions.py", line 179, in __call__
      return await self.inner(receive, self.send)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\channels\middleware.py", line 41, in coroutine_call
      await inner_instance(receive, send)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\channels\consumer.py", line 59, in __call__
      [receive, self.channel_receive], self.dispatch
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\channels\utils.py", line 52, in await_many_dispatch
      await dispatch(result)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\asgiref\sync.py", line 108, in __call__
      return await asyncio.wait_for(future, timeout=None)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\asyncio\tasks.py", line 388, in wait_for
      return await fut
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\concurrent\futures\thread.py", line 57, in run
      result = self.fn(*self.args, **self.kwargs)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\channels\db.py", line 13, in thread_handler
      return super().thread_handler(loop, *args, **kwargs)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\asgiref\sync.py", line 123, in thread_handler
      return self.func(*args, **kwargs)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\channels\consumer.py", line 105, in dispatch
      handler(message)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\site-packages\channels\generic\websocket.py", line 60, in websocket_receive
      self.receive(text_data=message["text"])
    File "C:\Users\Admin\PycharmProjects\power\myChannels\consumers.py", line 41, in receive
      text_data_json = json.loads(text_data)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\json\__init__.py", line 348, in loads
      return _default_decoder.decode(s)
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\json\decoder.py", line 337, in decode
      obj, end = self.raw_decode(s, idx=_w(s, 0).end())
    File "C:\Users\Admin\AppData\Local\Programs\Python\Python37-32\lib\json\decoder.py", line 355, in raw_decode
      raise JSONDecodeError("Expecting value", s, err.value) from None
    Expecting value: line 1 column 1 (char 0)
  WebSocket DISCONNECT /ws/power/room/ [127.0.0.1:50918]
  </code></pre>
  
  <p>I think there is something wrong with data type. Maybe i am not sending json and it is creating problem. </p>