org.mashupbots.socko.handlers

StaticContentHandler

class StaticContentHandler extends Actor

Handles downloading of static files and resources.

To trigger a download, send a org.mashupbots.socko.handlers.StaticFileRequest or org.mashupbots.socko.handlers.StaticResourceRequest message from your routes.

org.mashupbots.socko.handlers.StaticContentHandler performs HTTP compression and also uses the If-Modified-Since header for browser side caching.

Configuration

org.mashupbots.socko.handlers.StaticContentHandler uses lots of disk IO (blocking code). Please run it using a router with PinnedDispatcher (a thread per actor) or BalancingDispatcher.

For example:

router = actorSystem.actorOf(Props(new StaticContentHandler(StaticContentHandlerConfig()))
.withRouter(FromConfig()).withDispatcher("myDispatcher"), "myRouter")

Configuration in application.conf:

myDispatcher {
  executor = "thread-pool-executor"
  type = PinnedDispatcher
}

akka {
  event-handlers = ["akka.event.slf4j.Slf4jEventHandler"]
  loglevel=DEBUG
  actor {
    deployment {
      /myRouter {
        router = round-robin
        nr-of-instances = 5
      }
    }
  }
}

Caching Small Files

HTTP ETag header is used.

Request #1 Headers
------------------
GET /file1.txt HTTP/1.1

Response #1 Headers
------------------
HTTP/1.1 200 OK
Date:               Tue, 01 Mar 2011 22:44:26 GMT
ETag: "686897696a7c876b7e"
Expires:            Tue, 01 Mar 2012 22:44:26 GMT
Cache-Control:      private, max-age=31536000

Request #2 Headers
------------------
GET /file1.txt HTTP/1.1
If-None-Match: "686897696a7c876b7e"

Response #2 Headers
------------------
HTTP/1.1 304 Not Modified
Date:               Tue, 01 Mar 2011 22:44:28 GMT

Caching Big Files

HTTP If-Modified-Since header is used

Request #1 Headers
------------------
GET /file1.txt HTTP/1.1

Response #1 Headers
------------------
HTTP/1.1 200 OK
Date:               Tue, 01 Mar 2011 22:44:26 GMT
Last-Modified:      Wed, 30 Jun 2010 21:36:48 GMT
Expires:            Tue, 01 Mar 2012 22:44:26 GMT
Cache-Control:      private, max-age=31536000

Request #2 Headers
------------------
GET /file1.txt HTTP/1.1
If-Modified-Since:  Wed, 30 Jun 2010 21:36:48 GMT

Response #2 Headers
------------------
HTTP/1.1 304 Not Modified
Date:               Tue, 01 Mar 2011 22:44:28 GMT

Compression

HTTP Accept-Encoding header is used by the caller to nominate their supported compression algorithm. We return the compression format used in the Content-Encoding header.

Request
-------
GET /encrypted-area HTTP/1.1
Host: www.example.com
Accept-Encoding: gzip, deflate

Response
--------
HTTP/1.1 200 OK
Content-Encoding: gzip

Note

If a response includes both an Expires header and a max-age directive, the max-age directive overrides the Expires header, even if the Expires header is more restrictive

See HTTP Header Field Definitions

Linear Supertypes
Actor, AnyRef, Any
Ordering
  1. Alphabetic
  2. By inheritance
Inherited
  1. StaticContentHandler
  2. Actor
  3. AnyRef
  4. Any
  1. Hide All
  2. Show all
Learn more about member selection
Visibility
  1. Public
  2. All

Instance Constructors

  1. new StaticContentHandler(defaultConfig: StaticContentHandlerConfig)

Type Members

  1. type Receive = PartialFunction[Any, Unit]

    Definition Classes
    Actor

Value Members

  1. final def !=(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  2. final def ##(): Int

    Definition Classes
    AnyRef → Any
  3. final def ==(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  4. def aroundPostRestart(reason: Throwable): Unit

    Attributes
    protected[akka]
    Definition Classes
    Actor
  5. def aroundPostStop(): Unit

    Attributes
    protected[akka]
    Definition Classes
    Actor
  6. def aroundPreRestart(reason: Throwable, message: Option[Any]): Unit

    Attributes
    protected[akka]
    Definition Classes
    Actor
  7. def aroundPreStart(): Unit

    Attributes
    protected[akka]
    Definition Classes
    Actor
  8. def aroundReceive(receive: akka.actor.Actor.Receive, msg: Any): Unit

    Attributes
    protected[akka]
    Definition Classes
    Actor
  9. final def asInstanceOf[T0]: T0

    Definition Classes
    Any
  10. def clone(): AnyRef

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  11. implicit val context: ActorContext

    Definition Classes
    Actor
  12. final def eq(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  13. def equals(arg0: Any): Boolean

    Definition Classes
    AnyRef → Any
  14. def finalize(): Unit

    Attributes
    protected[java.lang]
    Definition Classes
    AnyRef
    Annotations
    @throws( classOf[java.lang.Throwable] )
  15. final def getClass(): Class[_]

    Definition Classes
    AnyRef → Any
  16. def hashCode(): Int

    Definition Classes
    AnyRef → Any
  17. final def isInstanceOf[T0]: Boolean

    Definition Classes
    Any
  18. final def ne(arg0: AnyRef): Boolean

    Definition Classes
    AnyRef
  19. final def notify(): Unit

    Definition Classes
    AnyRef
  20. final def notifyAll(): Unit

    Definition Classes
    AnyRef
  21. def postRestart(reason: Throwable): Unit

    Definition Classes
    Actor
    Annotations
    @throws( classOf[java.lang.Exception] )
  22. def postStop(): Unit

    Definition Classes
    Actor
    Annotations
    @throws( classOf[java.lang.Exception] )
  23. def preRestart(reason: Throwable, message: Option[Any]): Unit

    Definition Classes
    Actor
    Annotations
    @throws( classOf[java.lang.Exception] )
  24. def preStart(): Unit

    Definition Classes
    Actor
    Annotations
    @throws( classOf[java.lang.Exception] )
  25. def receive: PartialFunction[Any, Unit]

    Process the request.

  26. implicit final val self: ActorRef

    Definition Classes
    Actor
  27. final def sender(): ActorRef

    Definition Classes
    Actor
  28. def supervisorStrategy: SupervisorStrategy

    Definition Classes
    Actor
  29. final def synchronized[T0](arg0: ⇒ T0): T0

    Definition Classes
    AnyRef
  30. def toString(): String

    Definition Classes
    AnyRef → Any
  31. def unhandled(message: Any): Unit

    Definition Classes
    Actor
  32. final def wait(): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  33. final def wait(arg0: Long, arg1: Int): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )
  34. final def wait(arg0: Long): Unit

    Definition Classes
    AnyRef
    Annotations
    @throws( ... )

Inherited from Actor

Inherited from AnyRef

Inherited from Any

Ungrouped