Acting Natural

At this point we have a reasonably full-featured chat application. You can log in and chat with as many users as you like, and messages are sent around in realtime, but the experience is not quite complete. After a user sends a message to another user, there isn’t a lot of feedback about what is happening. Users of modern chat applications expect to be informed about what the other user is doing. Is the user typing? Did the user start typing and stop? Is this person still online? These are the types of features that change a standard chat script into a living, breathing realtime application. Luckily, with the code that’s already written, these features are easy to implement.

A sample chat session in multiple browser windows

Figure 6-4. A sample chat session in multiple browser windows

When the ability to see that a user is typing was introduced into chat applications, it seemed like a little thing. But after using this feature for even a short amount of time, it became hard to remember how chatting worked without it. To enable it in this application, it’s going to take a mixture of both Python and JavaScript. In the chat-server.py file, add a new URL handler to deal with typing messages:

class Application(tornado.web.Application):
        handlers = [
            (r"/", MainHandler),
            (r"/login/?", LoginHandler),
            (r"/updates/?", UpdateHandler),
            (r"/send/?", SendHandler),
            (r"/typing/?", TypingHandler),
            ]

This will route any requests for the ...

Get Building the Realtime User Experience now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.