In Chapter 13, you learned how clients can invoke HTTP requests in the background. You also learned how the server side can detach response processing from the original calling thread with an
AsyncResponse. In this chapter, we’ll use both of these features to implement a customer chat service.
Before we dive into code, let me explain the REST interface for our chat service. The service will share a URL to both send and receive chat messages. The service will work much like Twitter in that if one user posts a chat, anybody listening for chats will see it. Posting a chat is a simple HTTP POST request. Here’s an example request:
As you can see, all the user has to do is post a simple text message to the /chat URL and messages will be sent to all listeners.
To receive chat messages, clients will make a blocking GET request to the chat server:
When a chat becomes available, this GET request returns with the next chat message. Additionally, a
Link header is sent back with the HTTP response:
</chat?current=1>; rel=nextHello everybody
We do not want the chat client to lose any messages while it is processing a response. The
next link is a placeholder into the list of messages that are posted to the server. After displaying the chat message, the client will ...