SlideShare a Scribd company logo
Node.jsで
ブラウザメッセンジャー
ヤフー株式会社 R&D統括本部

石澤 基、濱邉 将太、栗山 太希
2011年10月29日(土) 東京Node学園祭 2011
Yahoo! JAPAN




2
講演者紹介

    石澤 基
    R&D統括本部 プラットフォーム開発本部 広告開発2部 開発4

    濱邉 将太
    R&D統括本部 フロントエンド開発1本部 開発5部 開発2

    栗山 太希
    R&D統括本部 プラットフォーム開発本部 広告開発1部 開発4




3
HackDayのご紹介

    • NodeKOのような社内開発イベント
    • 8時間×3日+発表会
    • 2分間LTでの社内に向けて発表




4
MYM

    • とにかくNode.jsが使いたい!
    • HackDay期間中にNode.jsで開発
    • HTML5 + Node.js + MongoDB
    • ブラウザ上で動作するメッセンジャーツール




5
MYMフロントエンド



             6
コンセプト

    • コンセプトは実験場
     – HTML5
       • WebSocket、 Web Worker、 Web Notification、
         File API、 Drag and Drop、 History API、…
     – ブラウザに先行実装された機能
    • とにかく気になる機能を実験的に
      使ってみる

7
Demo

       8
クライアントサイド検索
                 Node Server     検索開始時
    server                       のみ通信

    client

    Web
    Worker
             ユーザ検索   ルーム検索     ログ検索

    UI


9
脱ライブラリのススメ

     • JavaScriptエンジンの高速化
     • ネイティブメソッドの充実
     • CSS3によるアニメーション
     • ブラウザ仕様の統一
     • JavaScriptライブラリの利用は昔
       ほど必須ではなくなっている

10
脱jQuery
          ⇊
      JS力の向上
          ⇊
     Node力の向上

11
バックエンドサーバ



            12
バックエンドの構成




13
Node.js
     MongoDB
     WebSocket

14
アプリケーションサーバの実装
         (Node.js)




15
常時起動のサーバと言えば、




16
シグナルハンドラ




17
process.on('SIGINT', function () {
           // 諸々の後始末
           // exit
     });




18
process.on('SIGHUP', function () {
         try {
             // コンフィグの構文チェック
         }
         catch (err) {
             return util.log(err.stack);
         }
         // 諸々の後始末
         // exit
     });


19
process.on('uncaughtException', function (err) {
         util.log(err.stack);
     });




20
コンフィグファイル




21
$ cat conf.json
     {
        "maxConnections" : 1000,
        "port" : 9999,
        "messageBufferSize" : 8192,
        ...
     }




22
try {
        var data = fs.readFileSync('conf.json');
        config = JSON.parse(data);
     }
     catch (err) {
        util.log(err.stack);
        // exit
     }

     // 1000
     console.log(config.maxConnections);

23
Node.js v0.5.2

     try {
        config = require('conf.json');
     }
     catch (err) {
        util.log(err.stack);
        // exit
     }



24
ロギング




25
• util.log(err.stack);
         // 28 Oct 14:54:56 - ReferenceError: test is not defined
         // at [object Context]:1:7
         // at Interface.<anonymous> (repl.js:171:22)
         // at ReadStream.onData (tty_posix.js:70:12)
         // ...
     • util.log('message');
         // 28 Oct 15:33:36 - message




26
MongoDB


27
node-mongodb-native
     https://github.com/christkv/node-mongodb-native




28
スキーマレス

      BSON




29
function onMessage (data) {
       var message = JSON.parse(data);
       collection.save(message, function(err, doc) {
           // if (err) ...
           server.broadcast(JSON.stringify(doc));
       });
     }




30
抜群の相性




31
{
         "type" : "message",
         "date" : 1319792185,
         "_id" : "343ea44e42f0ef0001000000",
         ....
     }




32
WebSocket


33
WebSocket-Node
     https://github.com/Worlize/WebSocket-Node




34
ちょっとしたエピソード




35
2回のコード書き換え




36
1回目




37
マルチプロセスからシングルプ
          ロセスに




38
数百人が同時に常時接続




39
非同期I/Oとはいえ・・・




40
最初はマルチプロセス




41
・・・




42
プロセス間通信が大変




43
シングルプロセスに変更




44
全く問題なかった




45
見積りは大事!




46
2回目




47
ブラウザのバージョンアップ




48
WebSocketの仕様変更




49
下位互換性がない




50
ライブラリの変更




51
互換性のあるライブラリがない




52
WebSocket-Nodeに
      モンキーパッチ




53
ということがあった2日後




54
Socket.IOのアップデート




55
新バージョンサポート
     旧バージョン互換性あり




56
Socket.IO オススメ!




57
Nodeで実装してみて




58
お手軽




59
ネットワークプログラミングの味方




60
次のHackDayもNodeで




61
まとめ

     • 中規模アプリ開発には最適
       – オールJavaScriptの生産性
       – MongoDBの柔軟性
     • Socket.IOはオススメ
     • 脱jQueryでJS力アップ!Node力アップ!




62
ご清聴ありがとうございました




                 63

More Related Content

PDF
Node.js を選ぶとき 選ばないとき
PDF
Nodeについて
PDF
Node.js入門
PDF
Node.js Tutorial at Hiroshima
PDF
Node.js基礎の基礎 - Miyazaki.js vol.2
PPT
Node.js で Web アプリ開発
PDF
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
PPTX
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する
Node.js を選ぶとき 選ばないとき
Nodeについて
Node.js入門
Node.js Tutorial at Hiroshima
Node.js基礎の基礎 - Miyazaki.js vol.2
Node.js で Web アプリ開発
Nodeとフロントエンド − 知っておかなければならない、今と未来の話 −
【東京Node学園祭2016】Node.js × Babel で AWS Lambda アプリケーションを開発する

What's hot (20)

PDF
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
PPTX
Node.js Hands-On
PDF
Node js 入門
PDF
TypeScriptへの入口
PPTX
Node.js×mongo dbで3年間サービス運用してみた話
PDF
Hello, Node.js
PDF
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
PDF
サーバサイドNodeの使い道
PPT
[大図解]ピグライフはこう動いている
PDF
最近のフロントエンドツールの紹介
PDF
Node.jsでサーバプログラマ デビューしよう
PDF
Bp study39 nodejs
PPTX
Sails.jsのメリット・デメリット
PPT
20131012 nodejs
PPTX
AngularJS2でつまづいたこと
PPTX
たのしいNode.js
PPTX
Hokuriku.net 2013 01-26 node.js
PPTX
Node.jsではじめるサーバ構築
PDF
PDF
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
づや会 Vol4 Node.jsとphpのパフォーマンスを比較してみる
Node.js Hands-On
Node js 入門
TypeScriptへの入口
Node.js×mongo dbで3年間サービス運用してみた話
Hello, Node.js
大阪Node学園 七時限目 「ゼロからはじめるnode.js」
サーバサイドNodeの使い道
[大図解]ピグライフはこう動いている
最近のフロントエンドツールの紹介
Node.jsでサーバプログラマ デビューしよう
Bp study39 nodejs
Sails.jsのメリット・デメリット
20131012 nodejs
AngularJS2でつまづいたこと
たのしいNode.js
Hokuriku.net 2013 01-26 node.js
Node.jsではじめるサーバ構築
ぼくのかんがえたさいきょうのうぇぶあぷりけーしょんふれーむわーく - YAPC Asia 2011
Ad

Viewers also liked (7)

PDF
「新しい」を生み出すためのWebアプリ開発とその周辺
PDF
Real-time Bus Location System using by node.js
PDF
NodeFest2014 - Transpiler
PDF
Node-v0.12のTLSを256倍使いこなす方法
PPTX
Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )
PDF
power-assert, mechanism and philosophy
「新しい」を生み出すためのWebアプリ開発とその周辺
Real-time Bus Location System using by node.js
NodeFest2014 - Transpiler
Node-v0.12のTLSを256倍使いこなす方法
Nodeで操るKurentoメディアサーバー ( Kurento + WebRTC + Node.js )
power-assert, mechanism and philosophy
Ad

Similar to Node.jsでブラウザメッセンジャー (20)

PPTX
オタク×Node.js勉強会
PDF
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
PDF
WebSocket + Node.jsでつくるチャットアプリ
PDF
SocketStream入門
PDF
node+socket.io+enchant.jsでチャットゲーを作る
PDF
Nodeにしましょう
PDF
Nodejsによるapiサーバ構築事例
PPTX
120512 metro styleapp_javascript
PDF
Node.jsアプリの開発をモダン化するために取り組んできたこと
PDF
関西FirefoxOS勉強会6thGiG「アプリ間通信」
PDF
Java scriptの進化
PPTX
A 2-1 gitwebmatrix 2 から使う node.js on windows azure
PPTX
how to create a web server with a raspberry pi
PDF
Node.jsv0.8からv4.xへのバージョンアップ ~大規模Push通知基盤の運用事例~
PDF
Nodejs Introduction
PDF
inside 2012新卒説明会
PDF
TypeScript 勉強会
PDF
大規模なギョームシステムにHaxeを採用してみた話
PPTX
SL囲む会東京5 Nodejs×Silverlightではまったこと
PDF
泥臭い運用から、プログラマブルインフラ構築(に行きたい)
オタク×Node.js勉強会
SmartPhone development guide with CoffeeScript + Node + HTML5 Technology, for...
WebSocket + Node.jsでつくるチャットアプリ
SocketStream入門
node+socket.io+enchant.jsでチャットゲーを作る
Nodeにしましょう
Nodejsによるapiサーバ構築事例
120512 metro styleapp_javascript
Node.jsアプリの開発をモダン化するために取り組んできたこと
関西FirefoxOS勉強会6thGiG「アプリ間通信」
Java scriptの進化
A 2-1 gitwebmatrix 2 から使う node.js on windows azure
how to create a web server with a raspberry pi
Node.jsv0.8からv4.xへのバージョンアップ ~大規模Push通知基盤の運用事例~
Nodejs Introduction
inside 2012新卒説明会
TypeScript 勉強会
大規模なギョームシステムにHaxeを採用してみた話
SL囲む会東京5 Nodejs×Silverlightではまったこと
泥臭い運用から、プログラマブルインフラ構築(に行きたい)

More from Yahoo!デベロッパーネットワーク (20)

PDF
ゼロから始める転移学習
PDF
継続的なモデルモニタリングを実現するKubernetes Operator
PDF
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
PDF
オンプレML基盤on Kubernetes パネルディスカッション
PDF
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
PDF
Persistent-memory-native Database High-availability Feature
PDF
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
PDF
eコマースと実店舗の相互利益を目指したデザイン #yjtc
PDF
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
PDF
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
PDF
ビッグデータから人々のムードを捉える #yjtc
PDF
サイエンス領域におけるMLOpsの取り組み #yjtc
PDF
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
PDF
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
PDF
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
PDF
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
PDF
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
PDF
「新しいおうち探し」のためのAIアシスト検索 #yjtc
PDF
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc
ゼロから始める転移学習
継続的なモデルモニタリングを実現するKubernetes Operator
ヤフーでは開発迅速性と品質のバランスをどう取ってるか
オンプレML基盤on Kubernetes パネルディスカッション
オンプレML基盤on Kubernetes 〜Yahoo! JAPAN AIPF〜
Persistent-memory-native Database High-availability Feature
データの価値を最大化させるためのデザイン~データビジュアライゼーションの方法~ #devsumi 17-E-2
eコマースと実店舗の相互利益を目指したデザイン #yjtc
ヤフーを支えるセキュリティ ~サイバー攻撃を防ぐエンジニアの仕事とは~ #yjtc
Yahoo! JAPANのIaaSを支えるKubernetesクラスタ、アップデート自動化への挑戦 #yjtc
ビッグデータから人々のムードを捉える #yjtc
サイエンス領域におけるMLOpsの取り組み #yjtc
ヤフーのAIプラットフォーム紹介 ~AIテックカンパニーを支えるデータ基盤~ #yjtc
Yahoo! JAPAN Tech Conference 2022 Day2 Keynote #yjtc
新技術を使った次世代の商品の見せ方 ~ヤフオク!のマルチビュー機能~ #yjtc
PC版Yahoo!メールリニューアル ~サービスのUI/UX統合と改善プロセス~ #yjtc
モブデザインによる多職種チームのコミュニケーション改善 #yjtc
「新しいおうち探し」のためのAIアシスト検索 #yjtc
ユーザーの地域を考慮した検索入力補助機能の改善の試み #yjtc

Node.jsでブラウザメッセンジャー