Skip to content

Commit

Permalink
add playframework v1.x testbed and update performance report
Browse files Browse the repository at this point in the history
  • Loading branch information
greenlaw110 committed Jan 28, 2017
1 parent eacb628 commit 3cea0a4
Show file tree
Hide file tree
Showing 14 changed files with 378 additions and 1 deletion.
21 changes: 20 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,7 +13,7 @@
| Bootique + Jetty/Jersey | 65072.20 | 39.08ms | 11.17MB |
| WildFly Swarm | 58179.11 | 20.08ms | 7.66MB |
| Ninjaframework | 51948.21 | 27.55ms | 14.81MB |

| Play-1 | 50176.54 | 22.42ms | 21.44MB |

We are using pipeline.lua to generate more requests per second and the pipeline.lua is located
at light-java-example/performance/pipeline.lua.
Expand Down Expand Up @@ -207,4 +207,23 @@ Running 30s test @ http://localhost:8080
1563624 requests in 30.10s, 445.87MB read
Requests/sec: 51948.21
Transfer/sec: 14.81MB
```

Here is Playframework v1.4.x performance

```
luog@luog-Satellite-P50-A:~/p/tmp/light-java-example/performance$ wrk -t4 -c128 -d30s http://localhost:9000 -s pipeline.lua --latency -- / 16
Running 30s test @ http://localhost:9000
4 threads and 128 connections
Thread Stats Avg Stdev Max +/- Stdev
Latency 22.42ms 11.35ms 70.70ms 58.37%
Req/Sec 12.61k 730.55 14.56k 75.75%
Latency Distribution
50% 22.14ms
75% 32.31ms
90% 37.47ms
99% 43.82ms
1505641 requests in 30.01s, 643.28MB read
Requests/sec: 50176.54
Transfer/sec: 21.44MB
```
15 changes: 15 additions & 0 deletions play1/README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
Running

Download play-1.4.x from https://downloads.typesafe.com/play/1.4.4/play-1.4.4.zip

Unzip the package and add the dir into `$PATH` environment variable

enter the `play1` test bed dir, typesafe

```
play run --%prod
```

to start test bed in PROD mode

The server will start on port 9000.
16 changes: 16 additions & 0 deletions play1/app/controllers/Application.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package controllers;

import play.*;
import play.mvc.*;

import java.util.*;

import models.*;

public class Application extends Controller {

public static void index() {
renderText("Hello World!");
}

}
4 changes: 4 additions & 0 deletions play1/app/views/Application/index.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
#{extends 'main.html' /}
#{set title:'Home' /}

#{welcome /}
19 changes: 19 additions & 0 deletions play1/app/views/errors/404.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
<!DOCTYPE html>

<html>
<head>
<title>Not found</title>
<meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>
</head>
<body>
#{if play.mode.name() == 'DEV'}
#{404 result /}
#{/if}
#{else}
<h1>Not found</h1>
<p>
${result.message}
</p>
#{/else}
</body>
</html>
21 changes: 21 additions & 0 deletions play1/app/views/errors/500.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
<!DOCTYPE html>

<html>
<head>
<title>Application error</title>
<meta http-equiv="Content-Type" content="text/html; charset=${_response_encoding}"/>
</head>
<body>
#{if play.mode.name() == 'DEV'}
#{500 exception /}
#{/if}
#{else}
<h1>Oops, an error occurred</h1>
#{if exception instanceof play.exceptions.PlayException}
<p>
This exception has been logged with id <strong>${exception.id}</strong>.
</p>
#{/if}
#{/else}
</body>
</html>
17 changes: 17 additions & 0 deletions play1/app/views/main.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
<!DOCTYPE html>

<html>
<head>
<title>#{get 'title' /}</title>
<meta charset="${_response_encoding}">
<link rel="stylesheet" media="screen" href="@{'/public/stylesheets/main.css'}">
#{get 'moreStyles' /}
<link rel="shortcut icon" type="image/png" href="@{'/public/images/favicon.png'}">
</head>
<body>
#{doLayout /}

<script src="@{'/public/javascripts/jquery-1.6.4.min.js'}" type="text/javascript" charset="${_response_encoding}"></script>
#{get 'moreScripts' /}
</body>
</html>
240 changes: 240 additions & 0 deletions play1/conf/application.conf
Original file line number Diff line number Diff line change
@@ -0,0 +1,240 @@
# This is the main configuration file for the application.
# ~~~~~
application.name=play1

# Application mode
# ~~~~~
# Set to dev to enable instant reloading and other development help.
# Otherwise set to prod.
application.mode=dev
%prod.application.mode=prod

# Secret key
# ~~~~~
# The secret key is used to secure cryptographics functions
# If you deploy your application to several instances be sure to use the same key !
application.secret=fK0BqaZlUJyFIgqjmCykAVWyIhBasXRHgNCy1k2urq4aRXSjPZtdpICWMtD5BkgO

# i18n
# ~~~~~
# Define locales used by your application.
# You can then place localized messages in conf/messages.{locale} files
# application.langs=fr,en,ja

# Date format
# ~~~~~
date.format=yyyy-MM-dd
# date.format.fr=dd/MM/yyyy

# Server configuration
# ~~~~~
# If you need to change the HTTP port, uncomment this (default is set to 9000)
# http.port=9000
#
# By default the server listen for HTTP on the wildcard address.
# You can restrict this.
# http.address=127.0.0.1
#
# Use this if you don't host your Play application at the root of the domain
# you're serving it from. This parameter has no effect when deployed as a
# war, because the path will be handled by the application server.
# http.path=/

# Session configuration
# ~~~~~~~~~~~~~~~~~~~~~~
# By default, session will be written to the transient PLAY_SESSION cookie.
# The cookies are not secured by default, only set it to true
# if you're serving your pages through https.
# application.session.cookie=PLAY
# application.session.maxAge=1h
# application.session.secure=false

# Session/Cookie sharing between subdomain
# ~~~~~~~~~~~~~~~~~~~~~~
# By default a cookie is only valid for a specific domain. By setting
# application.defaultCookieDomain to '.example.com', the cookies
# will be valid for all domains ending with '.example.com', ie:
# foo.example.com and bar.example.com
# application.defaultCookieDomain=.example.com

# JVM configuration
# ~~~~~
# Define which port is used by JPDA when application is in debug mode (default is set to 8000)
# jpda.port=8000
#
# Java source level => 1.6, 1.7 or 1.8 (experimental)
# java.source=1.6

# Log level
# ~~~~~
# Specify log level for your application.
# If you want a very customized log, create a log4j.properties file in the conf directory
# application.log=INFO
#
# More logging configuration
# application.log.path=/log4j.properties
# application.log.system.out=off

# Database configuration
# ~~~~~
# Enable a database engine if needed.
#
# To quickly set up a development database, use either:
# - mem : for a transient in memory database (H2 in memory)
# - fs : for a simple file written database (H2 file stored)
# db.default=mem
#
# To connect to a local MySQL5 database, use:
# db.default=mysql://user:pwd@host/database
#
# To connect to a local PostgreSQL9 database, use:
# db=postgres://user:pwd@host/database
#
# If you need a full JDBC configuration use the following :
# db.default.url=jdbc:postgresql:database_name
# db.default.driver=org.postgresql.Driver
# db.default.user=root
# db.default.pass=secret
#
# Connections pool configuration :
# db.default.pool.timeout=1000
# db.default.pool.maxSize=30
# db.default.pool.minSize=10
#
# If you want to reuse an existing Datasource from your application server, use:
# db.default=java:/comp/env/jdbc/myDatasource
#
# When using an existing Datasource, it's sometimes needed to destroy it when
# the application is stopped. Depending on the datasource, you can define a
# generic "destroy" method :
# db.default.destroyMethod=close

# JPA Configuration (Hibernate)
# ~~~~~
#
# Specify the custom JPA dialect to use here (default to guess):
# jpa.default.dialect=org.hibernate.dialect.PostgreSQLDialect
#
# Specify the ddl generation pattern to use. Set to none to disable it
# (default to update in DEV mode, and none in PROD mode):
# jpa.default.ddl=update
#
# Debug SQL statements (logged using DEBUG level):
# jpa.default.debugSQL=true
#
# You can even specify additional hibernate properties here:
# default.hibernate.use_sql_comments=true
# ...
#
# Store path for Blob content
attachments.path=data/attachments

# Memcached configuration
# ~~~~~
# Enable memcached if needed. Otherwise a local cache is used.
# memcached=enabled
#
# Specify memcached host (default to 127.0.0.1:11211)
# memcached.host=127.0.0.1:11211
#
# Or you can specify multiple host to build a distributed cache
# memcached.1.host=127.0.0.1:11211
# memcached.2.host=127.0.0.1:11212
#
# Use plain SASL to authenticate for memcached
# memcached.user=
# memcached.password=

# HTTP Response headers control for static files
# ~~~~~
# Set the default max-age, telling the user's browser how long it should cache the page.
# Default is 3600 (one hour). Set it to 0 to send no-cache.
# This is only read in prod mode, in dev mode the cache is disabled.
# http.cacheControl=3600

# If enabled, Play will generate entity tags automatically and send a 304 when needed.
# Default is true, set it to false to deactivate use of entity tags.
# http.useETag=true

# Custom mime types
# mimetype.xpi=application/x-xpinstall

# WS configuration
# ~~~~~
# Default engine is Async Http Client, uncomment to use
# the JDK's internal implementation
# webservice = urlfetch
# If you need to set proxy params for WS requests
# http.proxyHost = localhost
# http.proxyPort = 3128
# http.proxyUser = jojo
# http.proxyPassword = jojo

# Mail configuration
# ~~~~~
# Default is to use a mock Mailer
mail.smtp=mock

# Or, specify mail host configuration
# mail.smtp.host=127.0.0.1
# mail.smtp.user=admin
# mail.smtp.pass=
# mail.smtp.channel=ssl

# Url-resolving in Jobs
# ~~~~~~
# When rendering templates with reverse-url-resoling (@@{..}) in Jobs (which do not have an inbound Http.Request),
# ie if sending a HtmlMail, Play need to know which url your users use when accessing your app.
# %test.application.baseUrl=http://localhost:9000/
# %prod.application.baseUrl=http://www.yourdomain.com/

# Templates additional precompilation
# ~~~~~~
# yaml files can use template expressions and are located in the conf folder.
# The default precompile task will not pickup those files.
# You can manually add some files with the following property
# (default: system property play.templates.compile, fallback system environment PLAY_TEMPLATES_COMPILE)
# play.templates.compile=conf/initialdata.yml;{module:reporting}test/reporting/unittests/export.yml
#
# Override the path separator if you want to use the Play!-module notation like {module:modname} on unix.
# (default: system property path.separator)
# play.templates.compile.path.separator=;

# Jobs executor
# ~~~~~~
# Size of the Jobs pool
# play.jobs.pool=10

# Execution pool
# ~~~~~
# Default to 1 thread in DEV mode or (nb processors + 1) threads in PROD mode.
# Try to keep a low as possible. 1 thread will serialize all requests (very useful for debugging purpose)
# play.pool=3

# Netty pipeline configuration (advanced settings)
# You can default netty settings by overriding the following line. Each handler must be comma separated.
# The last value must be the PlayHandler class (or your own that extends PlayHandler)
# Default values are
# play.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler
# For example, to enable Netty response compression
# play.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.PlayHandler
# For SSL, use the play.ssl.netty.pipeline property
# play.ssl.netty.pipeline = play.server.FlashPolicyHandler,org.jboss.netty.handler.codec.http.HttpRequestDecoder,play.server.StreamChunkAggregator,org.jboss.netty.handler.codec.http.HttpResponseEncoder,org.jboss.netty.handler.codec.http.HttpContentCompressor,org.jboss.netty.handler.stream.ChunkedWriteHandler,play.server.ssl.SslPlayHandler


# Open file from errors pages
# ~~~~~
# If your text editor supports opening files by URL, Play! will
# dynamically link error pages to files
#
# Example, for textmate:
# play.editor=txmt://open?url=file://%s&line=%s

# Testing. Set up a custom configuration for test mode
# ~~~~~
#%test.module.cobertura=${play.path}/modules/cobertura
%test.application.mode=dev
%test.db.url=jdbc:h2:mem:play;MODE=MYSQL;LOCK_MODE=0
%test.jpa.ddl=create
%test.mail.smtp=mock

4 changes: 4 additions & 0 deletions play1/conf/dependencies.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
# Application dependencies

require:
- play
3 changes: 3 additions & 0 deletions play1/conf/messages
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
# You can specialize this file for each language.
# For example, for French create a messages.fr file
#
15 changes: 15 additions & 0 deletions play1/conf/routes
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# Routes
# This file defines all application routes (Higher priority routes first)
# ~~~~

# Home page
GET / Application.index

# Ignore favicon requests
GET /favicon.ico 404

# Map static resources from the /app/public folder to the /public path
GET /public/ staticDir:public

# Catch all
* /{controller}/{action} {controller}.{action}
Binary file added play1/public/images/favicon.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading

0 comments on commit 3cea0a4

Please sign in to comment.