Mojolicious+Angularjsでwebsocket2
上記の設定を元に設定
nginxの設定ファイル
upstream chat { server 127.0.0.1:8012; } server { listen 80; server_name dev.example.com; root /var/www/tools/oreoreapp/reoreotsubuyakikun/public; access_log /var/log/chat.access.log main; location / { proxy_set_header X-Forwarded-Proto "http"; proxy_set_header Host $host; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_pass http://chat; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
supervisord
[program:oreoreapp] user=root command=/var/www/tools/oreoreapp/app.sh autostart=true autorestart=true stopsignal=QUIT
/var/www/tools/oreoreapp/app.sh
#!/bin/sh # export export PATH="/var/www/tools/app1/local/bin:/root/.plenv/shims:/root/.plenv/bin:/root/.phpenv/shims:/root/.phpenv/bin:/sbin:/bin:/usr/sbin:/usr/bin:/root/bin" # app start cd /var/www/tools/oreoreapp/reoreotsubuyakikun exec /root/.plenv/shims/hypnotoad -f app.psgi
※なんとなくフォアグラウンドで起動
※実行権限を別途付与
アプリ側の修正として
app.conf
{ hypnotoad => { listen => ['http://*:8012'], workers => 1 } };
※アプリ用のパラメータ設定を用意して
app.psgi
use Mojolicious::Lite; use DateTime; use Encode; use JSON; use utf8; # 設定ファイルを読み込み my $config = plugin('Config', {file => 'app.conf'}); # 接続人数 my $clients = {}; # Template with browser-side code get '/' => 'index'; # WebSocket echo service websocket '/echo' => sub { my $c = shift; my $id = sprintf "%s", $c->tx; $clients->{$id} = $c->tx; # Opened $c->app->log->debug('WebSocket opened.'); # Increase inactivity timeout for connection a bit $c->inactivity_timeout(300); # Incoming message $c->on(message => sub { my ($c, $msg) = @_; $c->app->log->debug('mesage->' . $msg); my $dt = DateTime->now( time_zone => 'Asia/Tokyo'); for (keys %$clients) { my $_msg = "$msg"; $clients->{$_}->send(JSON->new->utf8(0)->encode({ hms => $dt->hms, text => $_msg, })); } }); # Closed $c->on(finish => sub { my ($c, $code, $reason) = @_; $c->app->log->debug("WebSocket closed with status $code."); }); }; app->start;
※app.confを読み込み処理を追加