ブラウザでワンナイト人狼のSocket IO 更新しました


約2年ぶりに「ブラウザでワンナイト人狼」の更新をしました。
と、いってもゲームプログラム更新ではなく、通信モジュールの入れ替えです。

今回の入れ替えで、「ゲーム中の通信の安定」と「ゲーム対応ブラウザが増えた」と思います。

「ブラウザでワンナイト人狼」では、ネットワーク通信に HTTP 以外に WebSocket を使用していますが、2013年から更新をしていないのでかなり昔のバージョンの Node.js、Socket IO を使用していました。
Socket IO の API も 1.0系 と呼ばれる新しい物が出てきたり、また最近のブラウザでは「昔のバージョンの WebSocket」に対応していないものが増えてきたので、今回バージョンアップをしました。

ゲームプログラムそのものは変更していないので「ゲームの実行」に問題はでないと思ってますが、もし問題を見つけたら連絡して頂けると嬉しいです。

[2016.02.27 追記]

最近のブラウザはほぼ全て WebSocket に対応しているので、ブラウザでワンナイト人狼の「システム的な注意」を下記に換えました。

システム的な注意
・本システムはWebSocket対応ブラウザで動作します。なるべく新しいバージョンのブラウザを使ってください
・スマートフォンをお使いの場合、3G,LTE回線だと安定動作がしないことがございます。(特にマスターの人は)なるべくWifiで使用してください
・スマートフォンChromeブラウザで「コンテンツサイズ軽減機能(Chromeデータセーバー)」がONの場合、動かない場合があります。iOSのChromeでは「設定 > 帯域幅 > データサーバー 設定」でOFFにできます
・Android標準ブラウザですと上手く動かない場合があります。その場合はChromeラウザを使用してください
・お使いのネットワーク環境によっては動作しないことがございます。80ポート(HTTP)、443ポート(WebSocket)を使用しています。特に会社、学校、公共LANではWebSocket通信を許可していない場合があります
・ゲーム中、ブラウザを終了させたり、携帯の画面が消えたりロック状態になると、通信が切れてしまいゲームから追い出されてしまう場合があります。その場合はゲーム作成からやり直してください

特に Google Chrome で通信料を軽減する「Chromeデータサーバ」機能が ON の場合は WebSocket が使用できずエラーになります。Goole Chrome でゲームする場合は、OFF にしてください。
iPhone の Chrome の場合は「設定」画面を開いて「帯域幅」をクリックと下記画面になります。
データサーバが「オフ」になっていればOKです。下記画面のように ON の場合は OFF にしてください。

2016022411 2130

 

node.jsの自動再起動


先日、WebSocket通信 で使用している node.js が停止してしまい、「ブラウザでワンナイト人狼」ゲームが動かなくなっていました。ご迷惑をお掛けしました。

【関連記事】 node.js 止まってたわ(´・ω・`)

原因は解らなかったのですが、node.js をあまり長い間動かすとメモリリーク等で固まるのかもしれません。そこで、定期的に node.js を自動で再起動させることにしました。

こんな数行のシェルを組んでみました。

[bash]
#!/bin/sh

pid=`ps -elf | grep “app.js” | grep -v grep | awk ‘{print $4}’`
if [ “${pid}” != “” ]; then
kill ${pid}
echo “kill ${pid}”
fi
sleep 2
nohup /XXXXXX/node /XXXXXX/app.js > /dev/null &
[/bash]

このシェルを実行すると、今動いている node.js を kill して、新しい node.js を2秒後に起動します。後はこのシェルを自動実行するべく、cron設定を行いました。

[text]
# Node.js 定期リスタート処理
0 6 1 * * /XXXXXX/restartNodeJs.sh >/dev/null 2>&1
[/text]

これで、毎月1日 早朝6時に node.js が再起動するはずです。
標準エラー出力(STDERR) を /dev/null に流しているので、シェルの実行に失敗した時に気が付かないというツッコミがあると思いますが、このcron処理とは別に定期的なサービス監視が動いているので、node.jsが立ち上がらなかった場合はそちらで障害検知します。

さて、最初の自動再起動は 2013年8月1日 早朝6時ですね。
うまくいきますように!( ・`ω・´)/

[2013.09.13 追記]
現在は週に一回、月曜日の早朝 6:00 に再起動するようにしています。

[2016.02.23 追記]
現在は毎日一回、早朝 6:00 に再起動するようにしています。

node.js 止まってたわ(´・ω・`)


何通メールをもらってで気がついたのですが、2013年7月6日(月)に「ブラウザでワンナイト人狼」が動かなかったようです。

2013年7月6日(月)夜に復旧しました。
ユーザーの皆さんにはご迷惑をおかけしました。

原因は WebSocket 通信に使用していた node.js サーバの停止です (´・ω・`)
この node.js は何をしているかというと、ゲーム中に「各プレイヤーのブラウザ」と「ゲームマスターのブラウザ」間の通信を中継してくれています。

node.jsは、まだあまり安定していないとかメモリーリークがあるとかは聞いていたので、定期的にプロセス監視(node.js、ちゃんとサーバ上に居るかな?)を入れてたんですが、プロセスは存在しているのにサービスが動かなくなっていました(ちゃんとサーバ上にいるのに働いていない状態)

そこで、今は定期的なサービス監視(node.js、ちゃんと働いているかな?)を行うようにしました。
ですので、今後同様の問題が発生した場合は、発見が早くなると思います ( ー`дー´)

これからも「爆裂健ホームページ」と「ブラウザでワンナイト人狼」をよろしくお願いします。