title: Tornado equivalent to Twisted's dataReceived?
body: <p>Having used Twisted first, I might not be approaching the problem of bidirectional communication the right way with Tornado.</p>
  
  <p>The Twisted way to receive data would be:</p>
  
  <pre><code>class MyProtocol(Protocol):
      def dataReceived(self, data):
          # Figure out if this is a chunk of a previous message
          # or if it's a new message
  </code></pre>
  
  <p>I'm doing this with Tornado, which seems to work but is somewhat different:</p>
  
  <pre><code>class MyClient(object):
      @coroutine
      def main_loop(self):
          while True:
              message_header = yield Task(self.stream.read_bytes, 8)
  
              # Read/write from here
  </code></pre>
  
  <p>The documentation doesn't seem to suggest any "cleaner" approach (or any approach, for that matter), so am I going about this the right way?</p>