Play framework 2.x��������Web�T�[�o�[�ƘA�g��������@�A������o�����ʐM���s�����@���Љ�܂��B
�@�O��̋L���uPlay2�i�{JavaScript�j�A�v�����������A�œK������4�̃e�N�j�b�N�v�ł́A�L���b�V���̗��p���@����ʐM���s����@�A�N���C�A���g�T�C�h��JavaScript�����܂������e�N�j�b�N�ɂ��ďЉ�܂����B
�@�����Play framework 2.x�i�ȉ��APlay2�j��������Web�T�[�o�[�ƘA�g��������@�A������o�����ʐM���s�����@���Љ�܂��B
�@�A�ڑ�2��L���uPlay 2.0�̃A�[�L�e�N�`���ƃf�B���N�g���\���̊�b�m���v�ʼn�������܂������APlay2�ł́uNetty�v�Ƃ���HTTP�T�[�o�[�����Ă���A������g�p���ă��N�G�X�g���������܂��B���̂��߁APlay2�̋N���|�[�g��80�Ԃɐݒ肷��Βʏ��Web�T�[�o�[�Ɠ����悤�ɃA�N�Z�X�\�ł��B
�@�P����Web�A�v���P�[�V�����̏ꍇ�͂���Ŗ��͂Ȃ��̂ł����A�P��T�[�o�[�ŕ����A�v�����g�p������A�T�[�o�[���N���X�^�����O���ăX�P�[���u���ɂ������ꍇ�ɂ́A�t�����g��Apache��nginx�Ȃǂ�HTTP�T�[�o�[���g�p���āAPlay2�A�v���iNetty�j�ƘA�g�����邱�Ƃ��ł��܂��B
nginx�i�G���W���G�b�N�X�j�́A�I�[�v���\�[�X��Web�T�[�o�[�ŁA2013�N���_�ł�Apache�AIIS�Ɏ����g�p���������Ă��܂��B
HTTP�ȊO�ɂ����o�[�X�v���L�V�̋@�\�������Ă���AProxy�T�[�o�[�Ƃ��đ��̃A�v���P�[�V�����T�[�o�[�Ɠ����Ɏg�p����邱�Ƃ������悤�ł��B������Web�T�[�o�[��胊�\�[�X��}���A�����������\�������ł��܂��B
�@�ł́Anginx���C���X�g�[������Play2�A�v���ƘA�g���ē������Ă݂܂��傤�B
�@�܂���nginx���C���X�g�[�����܂��傤�B�����ł́AOS X�^Mac OS X��Homebrew���g�p���Ă���ꍇ��������܂��B���L�R�}���h��nginx���C���X�g�[���ł��܂��B
% brew install nginx
�@����ȊO�̊���nginx���C���X�g�[������ꍇ�Anginx�̃R�~���j�e�B�T�C�g�uInstallJa�v�̃y�[�W���Q�Ƃ��ăC���X�g�[�����@���m�F���Ă݂Ă��������B
�@�C���X�g�[��������������N�����Ă݂܂��傤�B
% nginx
�@��L�R�}���h�����s���A�uhttp://localhost:8080�v�ɃA�N�Z�X���āA���̂悤�ȉ�ʂ��\�������C���X�g�[���͊����ł��B
�@�ł́Anginx�̃��o�[�X�v���L�V�@�\���g�p����Play�A�v���ƘA�g�����Ă݂܂��傤�BHomebrew�ŃC���X�g�[�������ꍇ�u/usr/local/etc/nginx�v�Ɂunginx.conf�v������܂��B
���ݒ�t�@�C���̏ꏊ��������Ȃ��ꍇ�A�unginx -t�v�R�}���h�����s����A�ǂ��ɂ���ݒ�t�@�C�����g�p���Ă��邩��������܂�
�@nginx�i80�ԃ|�[�g�ŋN���j�ɃA�N�Z�X��������APlay�A�v���փt�H���[�h����悤�Ɏw�肵�܂��B
http {
�E
�E
�E
upstream my-backend {
server 127.0.0.1:9000;
}
server {
listen 80;
server_name localhost;
location / {
proxy_pass http://my-backend;
}
�E
�E
�E
}
�@nginx.conf��ҏW������nginx���ċN�����APlay�A�v�����N�����܂��傤�B
% nginx -s reload�isudo���K�v�ȏꍇ������܂��j % cd /path/rour/gyro % play run
�@�A�v�����N��������A�uhttp://localhost�v�ɃA�N�Z�X���Ă݂Ă��������B���܂łƓ������APlay�A�v�������s����Ă��܂��B���̂悤�ɁA�ȒP��nginx��Play�A�v�����A�g�ł��Ă��邱�Ƃ�������܂��B
�@Akka�Ƃ́AScala�^Java�Ŕ��������������邽�߂̃��C�u�����ŁAScala�̊J�����ł���Typesafe�Ђ����S�ƂȂ��ĊJ�����Ă��܂��BAkka�͌y�ʂȕ����̂��߂�Actor���f�����x�[�X�Ƃ��Ă���A���U�^����^�Ϗ�Q�����������C�x���g�쓮�^�A�v���P�[�V�������\�z�ł��܂��B
�@Akka�́u�A�N�^�[�V�X�e���v�ƌĂ��R���e�i�[�������Ă���APlay2�A�v���ł́A�A�v���P�[�V�������g���g�����ʂȃA�N�^�[�V�X�e������`����Ă��܂��i���Ǝ��̃A�N�^�[�V�X�e�����g�p���Ă���肠��܂���j�B
�@�����āAPlay2�A�v���̃A�N�^�[�V�X�e���𗘗p���邽�߂ɂ́Aplay.api.libs.concurrent.Akka�I�u�W�F�N�g�𗘗p���܂��B
import akka.actor._ val act = Akka.system.actorOf(Props[MyAct],name="myAct")
�@�Ȃ������h�L�������g�ł́A�u�f�t�H���g�̃A�N�^�[�V�X�e���́A���s����A�N�^�[�̐������Ȃ��A�ʂ̃A�N�^�[�V�X�e���������ŗp�ӂ���܂ł��Ȃ��悤�ȏꍇ�ɗ��p����Ƃ悢�v�Ƃ���܂��B������������Ă��m�F���������B
�@���̏͂ł�Play2�A�v�����Akka���g�p���A�X�P�W���[�����O�������s���Ă݂܂��傤�B
�@Akka�𗘗p���邱�ƂŁA�C�ӂ̏�������莞�Ԃ��ƂɎ��s������A�w�莞�Ԍ��1�����s�����肷�邱�Ƃ��ł��܂��B
�@�ȑO�A�A�v���N�����ɏ������s�����߁A�����g�p���Ă���gyro�v���W�F�N�g�ɁAGlobalSettings���p������Global�I�u�W�F�N�g���쐬���܂����B���̃I�u�W�F�N�g��Akka���g�p���ă^�X�N�̃X�P�W���[�����O���s���Ă݂܂��傤�B
�@Global���쐬���Ă��Ȃ��ꍇ�Aapp�f�B���N�g�����Ɂucommon.scala�v�Ƃ������O�̃t�@�C�����쐬���Ă��������Bcommon.scala�ł͉��L�̂悤�ɋL�q���܂��傤�B
import play.api._
import play.api.Play.current
import scala.concurrent.duration.DurationInt
import play.api.libs.concurrent.Akka
import play.api.libs.concurrent.Execution.Implicits._
object Global extends GlobalSettings {
override def onStart(app: Application) {
//���ȑO�쐬�����R�[�h
Logger.info("Application has started for " + app.mode + " mode.")
app.mode.toString match {
case "Prod" => Logger.info("Prod mode.")
case "Dev" => Logger.info("Dev mode.")
case "Test" => Logger.info("test mode.")
case _ => Logger.info("unknown mode.")
}
//5�b���1�����s
Akka.system.scheduler.scheduleOnce(5 seconds) {
println("execute Once")
}
//10�b���ƂɎ��s
Akka.system.scheduler.schedule(0 seconds, 10 seconds) {
println("execute Every 10 seconds")
}
}
override def onStop(app: Application) {
Logger.info("Application shutdown...")
}
}
�@�A�v���N����(dev���[�h�ł͏���A�N�Z�X��)�Ɏ��s�����onStart���ł́AAkka.system.scheduler���g�p���āA�X�P�W���[�����O���������s���Ă��܂��BscheduleOnce���ł͑�1�����̎w�莞�Ԍ��{}���̏�����1�����s����Aschedule���ł͑�1�������Ԍ�ɑ�2�������Ԃ��Ƃ�{}���̏��������s����܂��B
�@��L�L�q��������A�A�v�����N�����ăA�N�Z�X���Ă݂Ă��������B�R���\�[���Ƀ��b�Z�[�W���\������܂��B
�@�Ȃ��A�u5 seconds�v�Ƃ���������ȋL�q�́Aimport���Ă���uscala.concurrent.duration.DurationInt�v�ňÖٓI�^�ϊ����s���邱�Ƃɂ���ĉ\�ɂȂ��Ă��܂��B
�@���y�[�W�ł́AAkka��WebSocket���g�����T���v���������Ă݂܂��傤�B
Copyright © ITmedia, Inc. All Rights Reserved.
��IT eBook
�ҏW������̂��m�点