123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- package example
- import java.util.Date
- import java.text.SimpleDateFormat
- import akka.actor.{Actor, ActorRef, Props}
- import akka.util.ByteString
- import scala.concurrent.duration._
- import colossus.IOSystem
- import colossus.core.{ServerRef, ServerSettings}
- import colossus.service._
- import colossus.protocols.http._
- import net.liftweb.json._
- import JsonDSL._
- object BenchmarkService {
- class Timestamp(server: ServerRef) extends Actor {
-
- val sdf = new SimpleDateFormat("EEE, MMM d yyyy HH:MM:ss z")
- case object Tick
- import context.dispatcher
- override def preStart() {
- self ! Tick
- }
- def receive = {
- case Tick => {
- server.delegatorBroadcast(sdf.format(new Date()))
- context.system.scheduler.scheduleOnce(1.second, self, Tick)
- }
- }
- }
- val response = ByteString("Hello, World!")
- val plaintextHeader = ("Content-Type", "text/plain")
- val jsonHeader = ("Content-Type", "application/json")
- val serverHeader = ("Server", "Colossus")
- def start(port: Int)(implicit io: IOSystem) {
- val serverConfig = ServerSettings(
- port = port,
- maxConnections = 16384,
- tcpBacklogSize = Some(1024)
- )
- val serviceConfig = ServiceConfig(
- name = "/sample",
- requestTimeout = Duration.Inf,
- requestMetrics = false
- )
- val server = Service.serve[Http](serverConfig, serviceConfig) { context =>
- ///the ??? is filled in almost immediately by the actor
- var dateHeader = ("Date", "???")
- context.receive {
- case ts: String => dateHeader = ("Date", ts)
- }
-
- context.handle { connection =>
- connection.become{ case request =>
- if (request.head.url == "/plaintext") {
- val res = HttpResponse(
- version = HttpVersion.`1.1`,
- code = HttpCodes.OK,
- data = response,
- headers = Vector(plaintextHeader, serverHeader, dateHeader)
- )
- Callback.successful(res)
- } else if (request.head.url == "/json") {
- val json = ("message" -> "Hello, World!")
- val res = HttpResponse(
- version = HttpVersion.`1.1`,
- code = HttpCodes.OK,
- data = compact(render(json)),
- headers = Vector(jsonHeader, serverHeader, dateHeader)
- )
- Callback.successful(res)
- } else {
- Callback.successful(request.notFound("invalid path"))
- }
- }
- }
- }
- val timestamp = io.actorSystem.actorOf(Props(classOf[Timestamp], server))
- }
- }
- object Main extends App {
- implicit val io_system = IOSystem()
- BenchmarkService.start(9007)
- }
|