$npm install maptail
でインストールは終わりです。
使い方は、access_logのpathとexpressのbindの設定を引数で与えるだけです
apacheのaccresslogをchmodとかchownするのもあれなので、一旦rootでテストしてみます
$sudo su -
#export PATH=/home/shin/local/node/bin:$PATH
#export NODE_PATH=/home/shin/local/node:/home/shin/local/node/lib/node_modules
#cd /home/shin/dev/node_modules/maptail/
#node ./maptail.js /var/log/apache2/access.log luckyxrea.bf1.jp 5124
これで、
http://luckyxrea.bf1.jp:5124/mapにchromeでアクセスすると見たかった画面を見ることができます。
まずは、サンプルが動いたので次にコード検証をしていきます。
26-34行目で、express...って書いてある。何となくこいつがweb frameworkっぽい初期化コードになっている。
// configuration
var app = express.createServer()
app.configure(function(){
app.set('views', __dirname + '/views');
app.set('view engine', 'jade');
app.use(express.logger());
app.use(express.methodOverride());
app.use(express.bodyParser());
app.use(app.router);
app.use(express.static(__dirname + '/public'));
});
viewの定義が気になったので
#cat views/map.jadeで
link(rel='stylesheet', href='/css/wargames.css')
script(src='https://ajax.googleapis.com/ajax/libs/jquery/1.4.4/jquery.min.js')
script(src='/js/config.js')
script(src='http://' + wshost + ':' + wsport + '/socket.io/socket.io.js')
script(src='/js/raphael.js')
script(src='/js/map.js')
script(src='/js/client.js')
|
|
| had activity 0.00 sec ago
|
| messages in the last 40min
|
|
|
|
となっている。なるほど。
ふんわりexpressについての意義は分かったので、maptailを掘り下げてみる
引数のportとhostでbindしている74 // start Server75 app.listen(port, host);
77 // socket.io
79 var wsserver = http.createServer()
Websocketのサーバもbindしておくのね80 wsserver.listen(wsport, wshost);
18 var wsport = process.env.WSPORT || + port + 111
19 var wshost = process.env.WSHOST || hostこの辺のportも使ってるのか。
#netstal -l
tcp 0 0 localhost:5235 *:* LISTEN
tcp 0 0 localhost:ipp *:* LISTEN
tcp 0 0 localhost:postgresql *:* LISTEN
tcp 0 0 localhost:smtp *:* LISTEN
tcp 0 0 localhost:5124 *:* LISTEN
たしかに、port5124と+111の5235が使われていますね
コードの続きを読むと81 var socket = io.listen(wsserver)83 socket.on('connection', function(client) {
なるほど。worldの中身はgeoip判定がメインな感じなので大枠この辺までが重要な感じです。84 var id = client.sessionId85 , ip = client && client.request && client.request.socket && client.request.socket.remoteAddress || '000'8687 connected[id] = client8889 world.sendStartupData(client)9091 client.on('disconnect', function() {92 delete connected[id]93 })94 })