緊急地震速報の拡張機能を作ったときの感謝をこめて
こんにちは。先日のブログで以下のような発言をしたイッシーです。(●´ω`●)
僕は生産設備を持っていませんので食料をはじめとした物流における支援は難しいのかもしれません。しかしながらシステムエンジニアとして間接的な支援や情報における支援はできます。僕は、天災における「破壊」を修復するのは人々の「生産」と考えるとともに、その「生産」の一部分を担う者として頑張っていきたいと思います。
有言実行ということで緊急地震速報をお知らせするChrome用の拡張機能を作ってみました。そこで今回は技術的な部分をまとめておきます。
■仕様
クライアント側
Web Notifications
お知らせを表示する小窓です。一番はじめのブログの題材にしました。
WebSocket
双方向通信の規格。これを使うとサーバ側から情報をプッシュできます。
Audio API
お知らせ音を鳴らす際に使用しました。
サーバ側
node.js
サーバサイドJavaScript。一言では表せない存在。同時接続ユーザ数が増えた場合のパフォーマンスがapacheと比べて非常に良いと思います。
■困ったこと1
node-websocket-serverの接続数が1024以上にならない。
解決策
node serverを立ち上げる前に以下のコマンドを実行することで解決しました。
1 | ulimit -n 2048 |
デフォルトでファイルディスクリプタの数が1024になっているので、1プロセスあたり1024個の接続がリミットになっていたわけです。twitterで教えてくださった方に感謝です!
■困ったこと2
30分以上のスリープ状態から復帰すると接続が切れているが、イベントが発火せずプロパティにも特に変化がない。
解決策
以下のようなコードを使用することで回避しました。
1 2 3 4 5 6 7 8 9 | var reload = 600000; var before = new Date(); setInterval(function(){ var current = new Date(); if((current - before) > (reload + 15000)){ connect();// 再接続 } before = current; },reload); |
タイマーを利用してスリープを検知しています。通常はcurrentとbeforeの差は殆どreloadと等しくなりますが、スリープした場合に差が大きくなります。それを利用して再接続をしているわけです。ヒラメキに感謝!
コードが美しくないのでhtml5-developers-jpに質問してみたところ、「NATやFireWallがあり通信が一定期間無い場合、リソース節約のためにそのセッションテーブルを切ってしまうため、readyStateなどは変化しない」とアドバイスを頂きました。教えてくださった方ありがとうございます!
■困ったこと3
千人くらい使ってくれるかなと考えていましたので、一万人を超えた時は正直焦りました。急激にトラフィックが制限に近づいてます。ソーシャルゲームとは違いユーザ間でデータの共有はしてませんので、サーバさえあれば分散は容易になってます。また、協力してくださる方もいますので協力してくださる方に感謝です!
■まとめ
当初、不具合がありまして多くの皆様に迷惑をかけたにもかかわらず、温かい言葉をかけてくださいまして大変励みになりました。また、個人で制作したものではありますが、サーバーなど会社のバックアップがあってこそ運営できているものです。改めて周囲の皆様に感謝し今後も頑張っていきたいと思うとともに、震災にあわれた地域のいち早い復興を願っております。
2 Responses to 緊急地震速報の拡張機能を作ったときの感謝をこめて
コメントを残す コメントをキャンセル
Tech-Gymについて
Tech-Gymは、技術者の方向けの技術情報ブログです。株式会社プラスアールに所属している技術者が、ソーシャルゲーム、iPhone/Androidアプリ、キャリア公式サイトなどを運用しながら得た技術知識を、惜しみなく御紹介していきます!
素敵な仲間募集中です!!Facebook ファンページ
著者
■嶋田
名古屋グランパス一途な、雑食 草食系エンジニアです。
- twitter : @seltzer24
- facebook :4mada
■谷口
JAVAアプリ業界からソーシャル業界へ、現在初心に戻って頑張り中。
- twitter : @gucci1208
- facebook :gucci1208
■azu
Objective-C(iOSアプリ)、JavaScriptを書いています。
関連website
このページを友達と共有


[...] 会社のブログの続きです。 僕は生産設備を持っていませんので食料をはじめとした物流における支援は難しいのかもしれません。しかしながらシステムエンジニアとして間接的な支援や [...]
[...] 震速報 by Extension」を作って経験したことなどをまとめました。今回は後編です。前編は会社のブログに書きました。 僕は生産設備を持っていませんので食料をはじめとした物流における [...]