Skip to content

Instantly share code, notes, and snippets.

@luctrudeau
Last active August 29, 2015 14:23
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save luctrudeau/e4c389b0e165640fddd0 to your computer and use it in GitHub Desktop.
Save luctrudeau/e4c389b0e165640fddd0 to your computer and use it in GitHub Desktop.
Long Polling

HTTP Long Polling with NanoHTTPD

HTTP Long Polling Sequence Diagram

@startuml
hide footbox
Client -> Server: HTTP Get << Long Lived>>
activate Client
activate Server
Server -> Server: serve()
activate Server
Server -> BlockingQueue: poll(timeout, timeUnit)
activate BlockingQueue
BlockingQueue -> BlockingQueue: << Timeout >>
activate BlockingQueue
BlockingQueue --> Server: null
deactivate BlockingQueue
deactivate BlockingQueue
deactivate Server
Server --> Client: 408 Request Timeout
deactivate Server
Client -> Server: HTTP Get << Long Lived>>
activate Server
Server -> Server: serve()
activate Server
Server -> BlockingQueue: poll(timeout, timeUnit)
activate BlockingQueue
EventManager -> BlockingQueue: put(event)
activate BlockingQueue
BlockingQueue --> EventManager
deactivate BlockingQueue
BlockingQueue --> Server: return event
deactivate BlockingQueue
deactivate Server
Server --> Client: 200 OK event
deactivate Server
deactivate Client
@enduml
@luctrudeau
Copy link
Author

According to https://tools.ietf.org/html/rfc6202#section-5.5, the timeout should return a 408

@luctrudeau
Copy link
Author

After timeout, no exception are thrown, Poll returns null

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment